NPOIHelper

   1 /*
   2  * Made by Anby
   3  * 2013-7-10
   4  * 功能:通过NPoI组件操作Excel格式及设置
   5  */
   6 
   7 using System;
   8 using System.Collections.Generic;
   9 using System.Data;
  10 using System.IO;
  11 using System.Linq;
  12 using System.Text;
  13 using NPOI.HPSF;
  14 using NPOI.HSSF.UserModel;
  15 using NPOI.HSSF.Util;
  16 using NPOI.SS.UserModel;
  17 using NPOI.SS.Util;
  18 
  19 namespace TestApp
  20 {
  21     public  class NPOIHelper 
  22     {
  23 
  24         private HSSFWorkbook hssfworkbook = new HSSFWorkbook();
  25 
  26         private string xlsPath="";
  27 
  28         public NPOIHelper(string path)
  29         {
  30             xlsPath = path;
  31             using (FileStream file = new FileStream(path, FileMode.Open, FileAccess.Read))
  32             {
  33                 hssfworkbook = new HSSFWorkbook(file);
  34             }
  35         }
  36 
  37         #region 属性
  38 
  39         public string XlsPath
  40         {
  41             get { return xlsPath; }
  42             set { xlsPath = value; }
  43         }
  44 
  45         #endregion
  46 
  47         #region  方法
  48         /// <summary>
  49         /// 创建一个空的Excel文档,指定sheet名
  50         /// </summary>
  51         /// <param name="xlspath">excel保存路径,默认为xls后缀名</param>
  52         /// <param name="sheets">sheet名称</param>
  53         public void CreateEmptyExcelFile(string xlspath,params string[] sheets)
  54         {
  55             InitializeWorkbook();
  56 
  57             if (sheets.Count()>0)
  58             {
  59                 for (int i = 0; i < sheets.Count(); i++)
  60                 {
  61                     hssfworkbook.CreateSheet(sheets[i]);
  62                 } 
  63             }
  64             else
  65             {
  66                 hssfworkbook.CreateSheet("sheet1");
  67             }
  68            
  69             ((HSSFSheet)hssfworkbook.GetSheetAt(0)).AlternativeFormula = false;
  70             ((HSSFSheet)hssfworkbook.GetSheetAt(0)).AlternativeExpression = false;
  71 
  72             FileStream file = new FileStream(xlspath+".xls", FileMode.Create);
  73             hssfworkbook.Write(file);
  74             file.Close();
  75         }
  76         #endregion
  77 
  78         #region 私有方法
  79 
  80         /// <summary>
  81         /// 设置xls的信息
  82         /// </summary>
  83         private void InitializeWorkbook()
  84         {
  85             DocumentSummaryInformation dsi = PropertySetFactory.CreateDocumentSummaryInformation();
  86             dsi.Company = "NPOI Team";
  87             hssfworkbook.DocumentSummaryInformation = dsi;
  88 
  89             SummaryInformation si = PropertySetFactory.CreateSummaryInformation();
  90             si.Subject = "NPOI Example";
  91             hssfworkbook.SummaryInformation = si;
  92         }
  93 
  94         private void WriteToFile()
  95         {
  96             //Write the stream data of workbook to the root directory
  97             FileStream file = new FileStream(xlsPath, FileMode.Create);
  98             hssfworkbook.Write(file);
  99             file.Close();
 100         }
 101 
 102         #endregion
 103 
 104         /// <summary>
 105         /// 写入数据,无格式
 106         /// </summary>
 107         /// <param name="Sheetindex">sheet索引</param>
 108         /// <param name="value"></param>
 109         public void SetCellValuesInXls(int Sheetindex, int RowIndex, int CellIndex, string value)
 110         {
 111             InitializeWorkbook();
 112 
 113             ISheet sheet1 = hssfworkbook.GetSheetAt(Sheetindex);
 114 
 115             sheet1.CreateRow(RowIndex).CreateCell(CellIndex).SetCellValue(value);
 116            
 117             WriteToFile();
 118         }
 119         /// <summary>
 120         /// 写入日期格式
 121         /// </summary>
 122         /// <param name="Sheetindex"></param>
 123         /// <param name="RowIndex"></param>
 124         /// <param name="CellIndex"></param>
 125         /// <param name="value"></param>
 126         public void SetDateCellInXls(int Sheetindex, int RowIndex, int CellIndex, string date) 
 127         {
 128             InitializeWorkbook();
 129 
 130             ISheet sheet = hssfworkbook.GetSheetAt(Sheetindex);
 131             // Create a row and put some cells in it. Rows are 0 based.
 132             IRow row = sheet.CreateRow(RowIndex);
 133 
 134             // Create a cell and put a date value in it.  The first cell is not styled as a date.
 135             ICell cell = row.CreateCell(CellIndex);
 136             cell.SetCellValue(date);
 137         
 138             ICellStyle cellStyle = hssfworkbook.CreateCellStyle();
 139 
 140             cellStyle.DataFormat = hssfworkbook.CreateDataFormat().GetFormat("yyyy年m月d日");
 141             cell.CellStyle = cellStyle;
 142 
 143             //ICell cell2 = row.CreateCell(1);
 144             //cell2.SetCellValue(new DateTime(2008, 5, 5));
 145             //ICellStyle cellStyle2 = hssfworkbook.CreateCellStyle();
 146             //IDataFormat format = hssfworkbook.CreateDataFormat();
 147             //cellStyle2.DataFormat = format.GetFormat("yyyy年m月d日");
 148             //cell2.CellStyle = cellStyle2;
 149 
 150             //ICell cell3 = row.CreateCell(2);
 151             //cell3.CellFormula = "DateValue("2005-11-11 11:11:11")";
 152             //ICellStyle cellStyle3 = hssfworkbook.CreateCellStyle();
 153             //cellStyle3.DataFormat = HSSFDataFormat.GetBuiltinFormat("m/d/yy h:mm");
 154             //cell3.CellStyle = cellStyle3;
 155 
 156             WriteToFile();
 157         }
 158         /// <summary>
 159         /// 增加备注
 160         /// </summary>
 161         /// <param name="Sheetindex"></param>
 162         /// <param name="RowIndex"></param>
 163         /// <param name="CellIndex"></param>
 164         /// <param name="value"></param>
 165         /// <param name="commentStr">备注信息</param>
 166         public void SetCellCommentInXls(int Sheetindex, int RowIndex, int CellIndex, string value, string commentStr)
 167         {
 168             InitializeWorkbook();
 169 
 170             ISheet sheet = hssfworkbook.GetSheetAt(Sheetindex);
 171          
 172             IDrawing patr = (HSSFPatriarch)sheet.CreateDrawingPatriarch();
 173 
 174             ICell cell1 = sheet.CreateRow(RowIndex).CreateCell(CellIndex);
 175             cell1.SetCellValue(new HSSFRichTextString(value));
 176 
 177             //anchor defines size and position of the comment in worksheet
 178             IComment comment1 = patr.CreateCellComment(new HSSFClientAnchor(0, 0, 0, 0, 4, 2, 6, 5));
 179 
 180             // set text in the comment
 181             comment1.String = (new HSSFRichTextString(commentStr));
 182 
 183             // The first way to assign comment to a cell is via HSSFCell.SetCellComment method
 184             cell1.CellComment = (comment1);
 185             #region old
 186             ////Create another cell in row 6
 187             //ICell cell2 = sheet.CreateRow(6).CreateCell(1);
 188             //cell2.SetCellValue(value);
 189             //HSSFComment comment2 = (HSSFComment)patr.CreateCellComment(new HSSFClientAnchor(0, 0, 0, 0, 4, 8, 6, 11));
 190             ////modify background color of the comment
 191             //comment2.SetFillColor(204, 236, 255);
 192             //HSSFRichTextString str = new HSSFRichTextString("Normal body temperature");
 193             ////apply custom font to the text in the comment
 194             //IFont font = hssfworkbook.CreateFont();
 195             //font.FontName = ("Arial");
 196             //font.FontHeightInPoints = 10;
 197             //font.Boldweight = (short)FontBoldWeight.BOLD;
 198             //font.Color = HSSFColor.RED.index;
 199             //str.ApplyFont(font);
 200             //comment2.String = str;
 201             //comment2.Visible = true; //by default comments are hidden. This one is always visible.
 202             //comment2.Author = "Bill Gates";
 203             ///**
 204             // * The second way to assign comment to a cell is to implicitly specify its row and column.
 205             // * Note, it is possible to set row and column of a non-existing cell.
 206             // * It works, the commnet is visible.
 207             // */
 208             //comment2.Row = 6;
 209             //comment2.Column = 1;
 210             #endregion
 211             WriteToFile();
 212         }
 213         /// <summary>
 214         /// 给表格画边框
 215         /// </summary>
 216         /// <param name="Sheetindex"></param>
 217         /// <param name="RowIndex"></param>
 218         /// <param name="CellIndex"></param>
 219         public void SetBorderStyleInXls(int Sheetindex, int RowIndex, int CellIndex)
 220         {
 221             InitializeWorkbook(); 
 222 
 223             ISheet sheet = hssfworkbook.GetSheetAt(Sheetindex);
 224 
 225             // Create a row and put some cells in it. Rows are 0 based.
 226             IRow row = sheet.GetRow(RowIndex);
 227 
 228             // Create a cell and put a value in it.
 229             ICell cell =  row.GetCell(CellIndex);
 230 
 231             // Style the cell with borders all around.
 232             ICellStyle style = hssfworkbook.CreateCellStyle();
 233             style.BorderBottom = BorderStyle.THIN;
 234             style.BottomBorderColor = HSSFColor.BLACK.index;
 235             style.BorderLeft = BorderStyle.DASH_DOT_DOT;
 236             style.LeftBorderColor = HSSFColor.GREEN.index;
 237             style.BorderRight = BorderStyle.HAIR;
 238             style.RightBorderColor = HSSFColor.BLUE.index;
 239             style.BorderTop = BorderStyle.MEDIUM_DASHED;
 240             style.TopBorderColor = HSSFColor.ORANGE.index;
 241             cell.CellStyle = style;
 242 
 243             WriteToFile();
 244         }
 245         /// <summary>
 246         /// 给单元格加公式
 247         /// </summary>
 248         /// <param name="Sheetindex"></param>
 249         /// <param name="RowIdex"></param>
 250         /// <param name="CellIndex"></param>
 251         /// <param name="formula">公式</param>
 252         public void SetFormulaOfCellInXls(int Sheetindex, int RowIdex, int CellIndex, string formula)
 253         {  
 254             InitializeWorkbook();
 255 
 256             ISheet sheet1 = hssfworkbook.GetSheetAt(Sheetindex);
 257 
 258             ICellStyle blackBorder = hssfworkbook.CreateCellStyle();
 259             blackBorder.BorderBottom = BorderStyle.THIN;
 260             blackBorder.BorderLeft = BorderStyle.THIN;
 261             blackBorder.BorderRight = BorderStyle.THIN;
 262             blackBorder.BorderTop = BorderStyle.THIN;
 263             blackBorder.BottomBorderColor = HSSFColor.BLACK.index;
 264             blackBorder.LeftBorderColor = HSSFColor.BLACK.index;
 265             blackBorder.RightBorderColor = HSSFColor.BLACK.index;
 266             blackBorder.TopBorderColor = HSSFColor.BLACK.index;
 267 
 268             IRow row = sheet1.GetRow(RowIdex);
 269             ICell cell = row.CreateCell(CellIndex);
 270             cell.CellFormula = formula;
 271 
 272             WriteToFile();
 273         }
 274         /// <summary> 
 275         /// 设置打印区域 
 276         /// </summary>
 277         /// <param name="Sheetindex"></param>
 278         /// <param name="Area">"A5:G20"</param>
 279         public void SetPrintAreaInXls(int Sheetindex, string Area)
 280         {
 281             InitializeWorkbook();
 282 
 283             hssfworkbook.SetPrintArea(Sheetindex,Area );
 284 
 285             WriteToFile();
 286         }
 287         /// <summary>
 288         /// 设置打印格式,默认为A4纸
 289         /// </summary>
 290         /// <param name="Sheetindex"></param>
 291         /// <param name="Area"></param>
 292         public void SetPrintFormatInXls(int Sheetindex)
 293         {
 294             InitializeWorkbook();
 295 
 296             ISheet sheet1 = hssfworkbook.CreateSheet("Sheet1");
 297             sheet1.SetMargin(MarginType.RightMargin, (double)0.5);
 298             sheet1.SetMargin(MarginType.TopMargin, (double)0.6);
 299             sheet1.SetMargin(MarginType.LeftMargin, (double)0.4);
 300             sheet1.SetMargin(MarginType.BottomMargin, (double)0.3);
 301 
 302             sheet1.PrintSetup.Copies = 3;
 303             sheet1.PrintSetup.NoColor = true;
 304             sheet1.PrintSetup.Landscape = true;
 305             sheet1.PrintSetup.PaperSize = (short)PaperSize.A4;
 306 
 307             sheet1.FitToPage = true;
 308             sheet1.PrintSetup.FitHeight = 2;
 309             sheet1.PrintSetup.FitWidth = 3;
 310             sheet1.IsPrintGridlines = true;
 311 
 312             WriteToFile();
 313         }
 314         /// <summary>
 315         /// 设置表格的宽和高
 316         /// </summary>
 317         /// <param name="Sheetindex"></param>
 318         /// <param name="RowIdex"></param>
 319         /// <param name="width"></param>
 320         /// <param name="height"></param>
 321         public void SetWidthAndHeightInXls(int Sheetindex, int RowIdex,int CellIndex,int width,short height)
 322         {
 323             InitializeWorkbook();
 324 
 325             ISheet sheet1 = hssfworkbook.GetSheetAt(Sheetindex);
 326             //set the width of columns
 327             sheet1.SetColumnWidth(CellIndex, width);
 328 
 329             //set the width of height
 330             sheet1.GetRow(RowIdex).Height = height;
 331           
 332             sheet1.DefaultRowHeightInPoints = 50;
 333 
 334             WriteToFile();
 335         }
 336         /// <summary>
 337         /// 设置单元格对齐方式
 338         /// </summary>
 339         /// <param name="Sheetindex"></param>
 340         /// <param name="RowIdex"></param>
 341         /// <param name="CellIndex"></param>
 342         /// <param name="Horizont">水平对齐方式:left,center,right,justify</param>
 343         /// <param name="Vertical">垂直对齐方式:top,center,buttom,justify</param>
 344         public void SetAlignmentInXls(int Sheetindex, int RowIdex, int CellIndex, string Horizont, string Vertical)
 345         {
 346             InitializeWorkbook();
 347 
 348             ISheet sheet1 = hssfworkbook.GetSheetAt(Sheetindex);
 349 
 350             IRow row = sheet1.GetRow(RowIdex);
 351             ICellStyle style = hssfworkbook.CreateCellStyle();
 352             if (Horizont == "left")
 353             {
 354                 style.Alignment = HorizontalAlignment.LEFT;
 355             }
 356             else if (Horizont == "center")
 357             {
 358                 style.Alignment = HorizontalAlignment.CENTER;
 359             }
 360             else if (Horizont == "right")
 361             {
 362                 style.Alignment = HorizontalAlignment.RIGHT;
 363             }
 364             else if (Horizont == "justify")
 365             {
 366                 style.Alignment = HorizontalAlignment.JUSTIFY;
 367             }
 368           
 369             if (Vertical == "top")
 370             {
 371                 style.VerticalAlignment = VerticalAlignment.TOP;
 372             }
 373             else if (Vertical == "center")
 374             {
 375                 style.VerticalAlignment = VerticalAlignment.CENTER;
 376             }
 377             else if (Vertical == "buttom")
 378             {
 379                 style.VerticalAlignment = VerticalAlignment.BOTTOM;
 380             }
 381             else if (Vertical=="justify")
 382             {
 383                 style.VerticalAlignment = VerticalAlignment.JUSTIFY;
 384             }
 385             style.Indention = 3;
 386 
 387             row.GetCell(CellIndex).CellStyle = style;
 388 
 389             WriteToFile();
 390         }
 391         /// <summary>
 392         /// 放大缩小工作簿 根据  sub/den 进行缩放
 393         /// </summary>
 394         /// <param name="Sheetindex">要放大的sheet</param>
 395         /// <param name="sub">比列的分子</param>
 396         /// <param name="den">比列的分母</param>
 397         public void ZoomSheet(int Sheetindex,int sub,int den)
 398         {
 399             InitializeWorkbook();
 400 
 401             ISheet sheet1 = hssfworkbook.GetSheetAt(Sheetindex);
 402             sheet1.SetZoom(sub, den);   // 75 percent magnification
 403 
 404             WriteToFile();
 405         }
 406         /// <summary>
 407         /// 在单元格内使用多行存储数据
 408         /// </summary>
 409         /// <param name="Sheetindex"></param>
 410         /// <param name="RowIdex"></param>
 411         /// <param name="CellIndex"></param>
 412         /// <param name="rows">使用的行数</param>
 413         /// <param name="value">在换行的后面加上   
</param>
 414         public void UseNewlinesInCellsInXls(int Sheetindex, int RowIdex, int CellIndex,int rows,string value)
 415         {
 416             InitializeWorkbook(); 
 417 
 418             ISheet sheet1 = hssfworkbook.GetSheetAt(Sheetindex);
 419 
 420             //use newlines in cell
 421             IRow row1 = sheet1.GetRow(RowIdex);
 422             ICell cell1 = row1.GetCell(CellIndex);
 423 
 424             //to enable newlines you need set a cell styles with wrap=true
 425             ICellStyle cs = hssfworkbook.CreateCellStyle();
 426             cs.WrapText = true;
 427             cell1.CellStyle = cs;
 428 
 429             row1.HeightInPoints = rows * sheet1.DefaultRowHeightInPoints;
 430             cell1.SetCellValue(value);
 431             WriteToFile();
 432         }
 433         /// <summary>
 434         /// 单元格使用基础公式
 435         /// </summary>
 436         /// <param name="Sheetindex"></param>
 437         /// <param name="RowIdex"></param>
 438         /// <param name="CellIndex"></param>
 439         /// <param name="Formula"></param>
 440         public void UseBasicFormulaInXls(int Sheetindex, int RowIdex, int CellIndex, string Formula)
 441         {
 442             InitializeWorkbook();
 443             ISheet s1 = hssfworkbook.GetSheetAt(Sheetindex);
 444             //set A4=A2+A3,set D2=SUM(A2:C2);A5=cos(5)+sin(10)
 445             s1.GetRow(RowIdex).GetCell(CellIndex).CellFormula = Formula;
 446             WriteToFile();
 447         }
 448 
 449 
 450         /// <summary>
 451         /// 冻结行,FreezeRow为要冻结的行
 452         /// </summary>
 453         /// <param name="Sheetindex"></param>
 454         public void SplitAndFreezePanes(int Sheetindex, int FreezeRow)
 455         {
 456             InitializeWorkbook();
 457 
 458             ISheet sheet1 = hssfworkbook.GetSheetAt(Sheetindex);
 459 
 460             // Freeze just one row
 461             sheet1.CreateFreezePane(0, FreezeRow);
 462           
 463             WriteToFile();
 464         }
 465 
 466 
 467         /// <summary>
 468         /// 缩放指定单元格字体
 469         /// </summary>
 470         /// <param name="Sheetindex"></param>
 471         /// <param name="RowIdex"></param>
 472         /// <param name="CellIndex"></param>
 473         public void ShrinkToFitColumnInXls(int Sheetindex, int RowIdex, int CellIndex)
 474         {
 475             InitializeWorkbook();
 476 
 477             ISheet sheet = hssfworkbook.GetSheetAt(Sheetindex);
 478             IRow row = sheet.GetRow(RowIdex);
 479             //create cell value
 480             ICell cell1 = row.GetCell(CellIndex);
 481 
 482             ICellStyle cellstyle1 = hssfworkbook.CreateCellStyle();
 483             cellstyle1.ShrinkToFit = true;
 484             WriteToFile();
 485         }
 486 
 487 
 488         /// <summary>
 489         /// 将字体旋转指定角度
 490         /// </summary>
 491         /// <param name="Sheetindex"></param>
 492         /// <param name="RowIdex"></param>
 493         /// <param name="CellIndex"></param>
 494         /// <param name="Angle"></param>
 495         public void RotateTextInXls(int Sheetindex, int RowIdex, int CellIndex,short Angle)
 496         {
 497             InitializeWorkbook();
 498 
 499             ISheet sheet1 = hssfworkbook.GetSheetAt(Sheetindex);
 500 
 501             IRow row = sheet1.GetRow(RowIdex);
 502             //set the style
 503             ICellStyle style = hssfworkbook.CreateCellStyle();
 504             style.Rotation = Angle;
 505             row.GetCell(CellIndex).CellStyle = style;
 506 
 507             WriteToFile();
 508         }
 509 
 510         public void RepeatingRowsAndColumns(int Sheetindex, int RowIdex, int CellIndex)
 511         {
 512             InitializeWorkbook();
 513 
 514             ISheet sheet1 = hssfworkbook.GetSheetAt(Sheetindex);
 515 
 516             IFont boldFont = hssfworkbook.CreateFont();
 517             boldFont.FontHeightInPoints = 22;
 518             boldFont.Boldweight = (short)FontBoldWeight.BOLD;
 519 
 520             ICellStyle boldStyle = hssfworkbook.CreateCellStyle();
 521             boldStyle.SetFont(boldFont);
 522 
 523             IRow row = sheet1.GetRow(RowIdex);
 524             ICell cell = row.GetCell(CellIndex);
 525             cell.CellStyle = (boldStyle);
 526 
 527             // Set the columns to repeat from column 0 to 2 on the first sheet
 528             hssfworkbook.SetRepeatingRowsAndColumns(Sheetindex, 0, 2, -1, -1);
 529 
 530             WriteToFile();
 531         }
 532 
 533 
 534 
 535         /// <summary>
 536         /// 向单元格中写入数字格式
 537         /// </summary>
 538         /// <param name="Sheetindex"></param>
 539         /// <param name="RowIdex"></param>
 540         /// <param name="CellIndex"></param>
 541         /// <param name="type">double,RMB,scentific,percent,phone,ChineseCapital,ChineseDate</param>
 542         public void NumberFormatInXls(int Sheetindex, int RowIdex, int CellIndex,string type)
 543         {
 544             InitializeWorkbook();
 545 
 546             ISheet sheet = hssfworkbook.GetSheetAt(Sheetindex);
 547             //increase the width of Column A
 548             sheet.SetColumnWidth(0, 5000);
 549             //create the format instance
 550             IDataFormat format = hssfworkbook.CreateDataFormat();
 551 
 552             // Create a row and put some cells in it. Rows are 0 based.
 553             ICell cell = sheet.GetRow(RowIdex).GetCell(CellIndex);
 554             ICellStyle cellStyle = hssfworkbook.CreateCellStyle();
 555 
 556             if (type=="double")
 557             {
 558                 cellStyle.DataFormat = HSSFDataFormat.GetBuiltinFormat("0.00");
 559             }
 560             else if (type == "RMB")
 561             {
 562                 cellStyle.DataFormat = format.GetFormat("¥#,##0"); 
 563             }
 564             else if (type == "scentific")
 565             {
 566                 cellStyle.DataFormat = HSSFDataFormat.GetBuiltinFormat("0.00E+00");
 567             }
 568             else if (type == "percent")
 569             {
 570                 cellStyle.DataFormat = HSSFDataFormat.GetBuiltinFormat("0.00%");
 571             }
 572             else if (type == "phone")//phone number format - "021-65881234"
 573              {
 574                  cellStyle.DataFormat = format.GetFormat("000-00000000");
 575              }
 576             else if (type == "ChineseCapital") //Chinese capitalized character number - 壹贰叁 元
 577             {
 578                 cellStyle.DataFormat = format.GetFormat("[DbNum2][$-804]0 元");
 579             }
 580             else if (type == "ChineseDate")
 581             {
 582                 cellStyle.DataFormat = format.GetFormat("yyyy年m月d日");
 583             }
 584             cell.CellStyle = cellStyle;
 585         
 586             WriteToFile();
 587         }
 588 
 589 
 590         /// <summary>
 591         /// 将一个单元格赋予两个表格的乘积
 592         /// </summary>
 593         /// <param name="Sheetindex"></param>
 594         /// <param name="RowIdex">要赋值的单元格行索引</param>
 595         /// <param name="CellIndex">要赋值的单元格列索引</param>
 596         /// <param name="targateRow1">第一个单元格的行</param>
 597         /// <param name="targateCell1">第一个单元格的列</param>
 598         /// <param name="targateRow2">第二个单元格的行</param>
 599         /// <param name="targateCell2">第二个单元格的列</param>
 600         public void MultplicationTableInXls(int Sheetindex, int RowIdex, int CellIndex,int targateRow1,int targateCell1,
 601             int targateRow2,int targateCell2)
 602         {
 603             InitializeWorkbook();
 604 
 605             ISheet sheet1 = hssfworkbook.GetSheetAt(Sheetindex);
 606 
 607             IRow row = sheet1.GetRow(RowIdex);
 608 
 609             string formula = GetCellPosition(targateRow1, targateCell1) + "*" + GetCellPosition(targateRow2, targateCell2);
 610 
 611             row.CreateCell(CellIndex).CellFormula = formula;
 612 
 613             WriteToFile();
 614         }
 615         public string GetCellPosition(int row, int col)
 616         {
 617             col = Convert.ToInt32('A') + col;
 618             row = row + 1;
 619             return ((char)col) + row.ToString();
 620         }
 621         /// <summary>
 622         /// 合并单元格
 623         /// </summary>
 624         /// <param name="Sheetindex"></param>
 625         /// <param name="firstRowIdex">起始单元格</param>
 626         /// <param name="firstCellIndex"></param>
 627         /// <param name="lastRowIdex">结束单元格</param>
 628         /// <param name="lastCellIndex"></param>
 629         public void MergeCellsInXls(int Sheetindex, int firstRowIdex, int firstCellIndex, int lastRowIdex, int lastCellIndex)
 630         {
 631             InitializeWorkbook();
 632 
 633             ISheet sheet = hssfworkbook.GetSheetAt(Sheetindex);
 634 
 635             sheet.AddMergedRegion(new CellRangeAddress(0, 0, 0, 5));
 636 
 637             CellRangeAddress region = new CellRangeAddress(firstRowIdex, lastRowIdex, firstCellIndex, lastCellIndex);
 638 
 639             sheet.AddMergedRegion(region);
 640           
 641             WriteToFile();
 642         }
 643 
 644         #region 未处理
 645         public void LoanCalculator(int Sheetindex, int RowIdex, int CellIndex)
 646         {
 647             InitializeWorkbook();
 648             Dictionary<String, ICellStyle> styles = CreateStyles(hssfworkbook);
 649             ISheet sheet = hssfworkbook.GetSheetAt(Sheetindex);
 650             sheet.IsPrintGridlines = (false);//取消打印格的显示
 651             sheet.DisplayGridlines = (false);
 652 
 653             IPrintSetup printSetup = sheet.PrintSetup;
 654             printSetup.Landscape = (true);
 655             sheet.FitToPage = (true);
 656             sheet.HorizontallyCenter = (true);
 657 
 658             sheet.SetColumnWidth(0, 3 * 256);
 659             sheet.SetColumnWidth(1, 3 * 256);
 660             sheet.SetColumnWidth(2, 11 * 256);
 661             sheet.SetColumnWidth(3, 14 * 256);
 662             sheet.SetColumnWidth(4, 14 * 256);
 663             sheet.SetColumnWidth(5, 14 * 256);
 664             sheet.SetColumnWidth(6, 14 * 256);
 665 
 666             CreateNames(hssfworkbook);
 667 
 668             IRow titleRow = sheet.CreateRow(0);
 669             titleRow.HeightInPoints = (35);
 670             for (int i = 1; i <= 7; i++)
 671             {
 672                 titleRow.CreateCell(i).CellStyle = styles["title"];
 673             }
 674             ICell titleCell = titleRow.GetCell(2);
 675             titleCell.SetCellValue("Simple Loan Calculator");
 676             sheet.AddMergedRegion(CellRangeAddress.ValueOf("$C$1:$H$1"));
 677 
 678             IRow row = sheet.CreateRow(2);
 679             ICell cell = row.CreateCell(4);
 680             cell.SetCellValue("Enter values");
 681             cell.CellStyle = styles["item_right"];
 682 
 683             row = sheet.CreateRow(3);
 684             cell = row.CreateCell(2);
 685             cell.SetCellValue("Loan amount");
 686             cell.CellStyle = styles["item_left"];
 687             cell = row.CreateCell(4);
 688             cell.CellStyle = styles["input_$"];
 689             cell.SetAsActiveCell();
 690 
 691             row = sheet.CreateRow(4);
 692             cell = row.CreateCell(2);
 693             cell.SetCellValue("Annual interest rate");
 694             cell.CellStyle = styles["item_left"];
 695             cell = row.CreateCell(4);
 696             cell.CellStyle = styles["input_%"];
 697 
 698             row = sheet.CreateRow(5);
 699             cell = row.CreateCell(2);
 700             cell.SetCellValue("Loan period in years");
 701             cell.CellStyle = styles["item_left"];
 702             cell = row.CreateCell(4);
 703             cell.CellStyle = styles["input_i"];
 704 
 705             row = sheet.CreateRow(6);
 706             cell = row.CreateCell(2);
 707             cell.SetCellValue("Start date of loan");
 708             cell.CellStyle = styles["item_left"];
 709             cell = row.CreateCell(4);
 710             cell.CellStyle = styles["input_d"];
 711 
 712             row = sheet.CreateRow(8);
 713             cell = row.CreateCell(2);
 714             cell.SetCellValue("Monthly payment");
 715             cell.CellStyle = styles["item_left"];
 716             cell = row.CreateCell(4);
 717             cell.CellFormula = ("IF(Values_Entered,Monthly_Payment,"")");
 718             cell.CellStyle = styles["formula_$"];
 719 
 720             row = sheet.CreateRow(9);
 721             cell = row.CreateCell(2);
 722             cell.SetCellValue("Number of payments");
 723             cell.CellStyle = styles["item_left"];
 724             cell = row.CreateCell(4);
 725             cell.CellFormula = ("IF(Values_Entered,Loan_Years*12,"")");
 726             cell.CellStyle = styles["formula_i"];
 727 
 728             row = sheet.CreateRow(10);
 729             cell = row.CreateCell(2);
 730             cell.SetCellValue("Total interest");
 731             cell.CellStyle = styles["item_left"];
 732             cell = row.CreateCell(4);
 733             cell.CellFormula = ("IF(Values_Entered,Total_Cost-Loan_Amount,"")");
 734             cell.CellStyle = styles["formula_$"];
 735 
 736             row = sheet.CreateRow(11);
 737             cell = row.CreateCell(2);
 738             cell.SetCellValue("Total cost of loan");
 739             cell.CellStyle = styles["item_left"];
 740             cell = row.CreateCell(4);
 741             cell.CellFormula = ("IF(Values_Entered,Monthly_Payment*Number_of_Payments,"")");
 742             cell.CellStyle = styles["formula_$"];
 743 
 744 
 745             WriteToFile();
 746         }
 747 
 748         /**
 749          * cell styles used for formatting calendar sheets
 750         */
 751         private static Dictionary<String, ICellStyle> CreateStyles(IWorkbook wb)
 752         {
 753             Dictionary<String, ICellStyle> styles = new Dictionary<String, ICellStyle>();
 754 
 755             ICellStyle style = null;
 756             IFont titleFont = wb.CreateFont();
 757             titleFont.FontHeightInPoints = (short)14;
 758             titleFont.FontName = "Trebuchet MS";
 759             style = wb.CreateCellStyle();
 760             style.SetFont(titleFont);
 761             style.BorderBottom = BorderStyle.DOTTED;
 762             style.BottomBorderColor = IndexedColors.GREY_40_PERCENT.Index;
 763             styles.Add("title", style);
 764 
 765             IFont itemFont = wb.CreateFont();
 766             itemFont.FontHeightInPoints = (short)9;
 767             itemFont.FontName = "Trebuchet MS";
 768             style = wb.CreateCellStyle();
 769             style.Alignment = (HorizontalAlignment.LEFT);
 770             style.SetFont(itemFont);
 771             styles.Add("item_left", style);
 772 
 773             style = wb.CreateCellStyle();
 774             style.Alignment = HorizontalAlignment.RIGHT;
 775             style.SetFont(itemFont);
 776             styles.Add("item_right", style);
 777 
 778             style = wb.CreateCellStyle();
 779             style.Alignment = HorizontalAlignment.RIGHT;
 780             style.SetFont(itemFont);
 781             style.BorderRight = BorderStyle.DOTTED;
 782             style.RightBorderColor = IndexedColors.GREY_40_PERCENT.Index;
 783             style.BorderBottom = BorderStyle.DOTTED;
 784             style.BottomBorderColor = IndexedColors.GREY_40_PERCENT.Index;
 785             style.BorderLeft = BorderStyle.DOTTED;
 786             style.LeftBorderColor = IndexedColors.GREY_40_PERCENT.Index;
 787             style.BorderTop = BorderStyle.DOTTED;
 788             style.TopBorderColor = IndexedColors.GREY_40_PERCENT.Index;
 789             style.DataFormat = (wb.CreateDataFormat().GetFormat("_($* #,##0.00_);_($* (#,##0.00);_($* "-"??_);_(@_)"));
 790             styles.Add("input_$", style);
 791 
 792             style = wb.CreateCellStyle();
 793             style.Alignment = HorizontalAlignment.RIGHT;
 794             style.SetFont(itemFont);
 795             style.BorderRight = BorderStyle.DOTTED;
 796             style.RightBorderColor = IndexedColors.GREY_40_PERCENT.Index;
 797             style.BorderBottom = BorderStyle.DOTTED;
 798             style.BottomBorderColor = IndexedColors.GREY_40_PERCENT.Index;
 799             style.BorderLeft = BorderStyle.DOTTED;
 800             style.LeftBorderColor = IndexedColors.GREY_40_PERCENT.Index;
 801             style.BorderTop = BorderStyle.DOTTED;
 802             style.TopBorderColor = IndexedColors.GREY_40_PERCENT.Index;
 803             style.DataFormat = (wb.CreateDataFormat().GetFormat("0.000%"));
 804             styles.Add("input_%", style);
 805 
 806             style = wb.CreateCellStyle();
 807             style.Alignment = HorizontalAlignment.RIGHT;
 808             style.SetFont(itemFont);
 809             style.BorderRight = BorderStyle.DOTTED;
 810             style.RightBorderColor = IndexedColors.GREY_40_PERCENT.Index;
 811             style.BorderBottom = BorderStyle.DOTTED;
 812             style.BottomBorderColor = IndexedColors.GREY_40_PERCENT.Index;
 813             style.BorderLeft = BorderStyle.DOTTED;
 814             style.LeftBorderColor = IndexedColors.GREY_40_PERCENT.Index;
 815             style.BorderTop = BorderStyle.DOTTED;
 816             style.TopBorderColor = IndexedColors.GREY_40_PERCENT.Index;
 817             style.DataFormat = wb.CreateDataFormat().GetFormat("0");
 818             styles.Add("input_i", style);
 819 
 820             style = wb.CreateCellStyle();
 821             style.Alignment = (HorizontalAlignment.CENTER);
 822             style.SetFont(itemFont);
 823             style.DataFormat = wb.CreateDataFormat().GetFormat("m/d/yy");
 824             styles.Add("input_d", style);
 825 
 826             style = wb.CreateCellStyle();
 827             style.Alignment = HorizontalAlignment.RIGHT;
 828             style.SetFont(itemFont);
 829             style.BorderRight = BorderStyle.DOTTED;
 830             style.RightBorderColor = IndexedColors.GREY_40_PERCENT.Index;
 831             style.BorderBottom = BorderStyle.DOTTED;
 832             style.BottomBorderColor = IndexedColors.GREY_40_PERCENT.Index;
 833             style.BorderLeft = BorderStyle.DOTTED;
 834             style.LeftBorderColor = IndexedColors.GREY_40_PERCENT.Index;
 835             style.BorderTop = BorderStyle.DOTTED;
 836             style.TopBorderColor = IndexedColors.GREY_40_PERCENT.Index;
 837             style.DataFormat = wb.CreateDataFormat().GetFormat("$##,##0.00");
 838             style.BorderBottom = BorderStyle.DOTTED;
 839             style.BottomBorderColor = IndexedColors.GREY_40_PERCENT.Index;
 840             style.FillForegroundColor = IndexedColors.GREY_25_PERCENT.Index;
 841             style.FillPattern = FillPatternType.SOLID_FOREGROUND;
 842             styles.Add("formula_$", style);
 843 
 844             style = wb.CreateCellStyle();
 845             style.Alignment = HorizontalAlignment.RIGHT;
 846             style.SetFont(itemFont);
 847             style.BorderRight = BorderStyle.DOTTED;
 848             style.RightBorderColor = IndexedColors.GREY_40_PERCENT.Index;
 849             style.BorderBottom = BorderStyle.DOTTED;
 850             style.BottomBorderColor = IndexedColors.GREY_40_PERCENT.Index;
 851             style.BorderLeft = BorderStyle.DOTTED;
 852             style.LeftBorderColor = IndexedColors.GREY_40_PERCENT.Index;
 853             style.BorderTop = BorderStyle.DOTTED;
 854             style.TopBorderColor = IndexedColors.GREY_40_PERCENT.Index;
 855             style.DataFormat = wb.CreateDataFormat().GetFormat("0");
 856             style.BorderBottom = BorderStyle.DOTTED;
 857             style.BottomBorderColor = IndexedColors.GREY_40_PERCENT.Index;
 858             style.FillForegroundColor = IndexedColors.GREY_25_PERCENT.Index;
 859             style.FillPattern = (FillPatternType.SOLID_FOREGROUND);
 860             styles.Add("formula_i", style);
 861 
 862             return styles;
 863         }
 864 
 865 
 866         //define named ranges for the inputs and formulas
 867         public static void CreateNames(IWorkbook wb)
 868         {
 869             IName name;
 870 
 871             name = wb.CreateName();
 872             name.NameName = ("Interest_Rate");
 873             name.RefersToFormula = ("'Loan Calculator'!$E$5");
 874 
 875             name = wb.CreateName();
 876             name.NameName = ("Loan_Amount");
 877             name.RefersToFormula = ("'Loan Calculator'!$E$4");
 878 
 879             name = wb.CreateName();
 880             name.NameName = ("Loan_Start");
 881             name.RefersToFormula = ("'Loan Calculator'!$E$7");
 882 
 883             name = wb.CreateName();
 884             name.NameName = ("Loan_Years");
 885             name.RefersToFormula = ("'Loan Calculator'!$E$6");
 886 
 887             name = wb.CreateName();
 888             name.NameName = ("Number_of_Payments");
 889             name.RefersToFormula = ("'Loan Calculator'!$E$10");
 890 
 891             name = wb.CreateName();
 892             name.NameName = ("Monthly_Payment");
 893             name.RefersToFormula = ("-PMT(Interest_Rate/12,Number_of_Payments,Loan_Amount)");
 894 
 895             name = wb.CreateName();
 896             name.NameName = ("Total_Cost");
 897             name.RefersToFormula = ("'Loan Calculator'!$E$12");
 898 
 899             name = wb.CreateName();
 900             name.NameName = ("Total_Interest");
 901             name.RefersToFormula = ("'Loan Calculator'!$E$11");
 902 
 903             name = wb.CreateName();
 904             name.NameName = ("Values_Entered");
 905             name.RefersToFormula = ("IF(ISBLANK(Loan_Start),0,IF(Loan_Amount*Interest_Rate*Loan_Years>0,1,0))");
 906         }
 907 
 908         #endregion
 909 
 910 
 911        /// <summary>
 912         /// excel中插入图片,支持jpeg
 913        /// </summary>
 914        /// <param name="Sheetindex"></param>
 915        /// <param name="RowIdex"></param>
 916        /// <param name="CellIndex"></param>
 917        /// <param name="picpath">图片地址</param>
 918        /// <param name="dx1">图片坐标</param>
 919        /// <param name="dy1"></param>
 920        /// <param name="dx2"></param>
 921        /// <param name="dy2"></param>
 922        /// <param name="col1">表格</param>
 923        /// <param name="row1"></param>
 924        /// <param name="col2"></param>
 925        /// <param name="row2"></param>
 926         public void InsertPicturesInXls(int Sheetindex, int RowIdex, int CellIndex, string picpath
 927             ,int dx1,int dy1,int dx2,int dy2,int col1,int row1,int col2,int row2)
 928         {
 929             InitializeWorkbook();
 930 
 931             ISheet sheet1 = hssfworkbook.GetSheetAt(Sheetindex); 
 932 
 933             HSSFPatriarch patriarch = (HSSFPatriarch)sheet1.CreateDrawingPatriarch(); 
 934             //create the anchor
 935             HSSFClientAnchor anchor;
 936             anchor = new HSSFClientAnchor(dx1, dy1, dx2, dy2, col1, row1, col2, row2);
 937             anchor.AnchorType = 2;
 938             //load the picture and get the picture index in the workbook
 939             HSSFPicture picture = (HSSFPicture)patriarch.CreatePicture(anchor, LoadImage(picpath, hssfworkbook));
 940             //Reset the image to the original size.
 941             //picture.Resize();   //Note: Resize will reset client anchor you set.
 942             picture.LineStyle = LineStyle.DashDotGel;
 943 
 944             WriteToFile();
 945         }
 946 
 947         private  int LoadImage(string path, HSSFWorkbook wb)
 948         {
 949             FileStream file = new FileStream(path, FileMode.Open, FileAccess.Read);
 950             byte[] buffer = new byte[file.Length];
 951             file.Read(buffer, 0, (int)file.Length);
 952             return wb.AddPicture(buffer, PictureType.JPEG);
 953 
 954         }
 955         /// <summary>
 956         /// 隐藏Excel行和列
 957         /// </summary>
 958         /// <param name="Sheetindex"></param>
 959         /// <param name="RowIdex"></param>
 960         /// <param name="CellIndex"></param>
 961         /// <param name="isHiddenCol"></param>
 962         public void HideColumnAndRowInXls (int Sheetindex, int RowIdex, int CellIndex,bool isHiddenCol)
 963         {
 964             InitializeWorkbook();
 965 
 966             ISheet s = hssfworkbook.GetSheetAt(Sheetindex);
 967             IRow r1 = s.GetRow(RowIdex);
 968           
 969 
 970             //hide IRow 2
 971             r1.ZeroHeight = true;
 972 
 973             //hide column C
 974             s.SetColumnHidden(CellIndex, isHiddenCol);
 975 
 976             WriteToFile();
 977         }
 978         /// <summary>
 979         /// 填充背景颜色
 980         /// </summary>
 981         /// <param name="Sheetindex"></param>
 982         /// <param name="RowIdex"></param>
 983         /// <param name="CellIndex"></param>
 984         /// <param name="fpt">填充类型</param>
 985         /// <param name="Forecolor">前景色:NPOI.HSSF.Util.HSSFColor.BLUE.index</param>
 986         /// <param name="backcolor">背景颜色:NPOI.HSSF.Util.HSSFColor.BLUE.index</param>
 987         public void FillBackgroundInXls(int Sheetindex, int RowIdex, int CellIndex,FillPatternType fpt,short Forecolor,short backcolor)
 988         {
 989             InitializeWorkbook();
 990 
 991             ISheet sheet1 = hssfworkbook.GetSheetAt(Sheetindex);
 992             //fill background
 993             ICellStyle style1 = hssfworkbook.CreateCellStyle();
 994             style1.FillForegroundColor = Forecolor;
 995             style1.FillPattern = fpt;
 996             style1.FillBackgroundColor = backcolor;
 997             sheet1.GetRow(RowIdex).GetCell(CellIndex).CellStyle= style1; 
 998             WriteToFile();
 999         }
1000 
1001 
1002         /// <summary>
1003         /// 
1004         /// </summary>
1005         /// <param name="Sheetindex"></param>
1006         /// <param name="RowIdex"></param>
1007         /// <param name="CellIndex"></param>
1008         /// <param name="fontName">字体名</param>
1009         /// <param name="color">颜色</param>
1010         /// <param name="istalic">斜体</param>
1011         /// <param name="IsStrikeout">删除线</param>
1012         /// <param name="size">字体大小</param>
1013         public void ApplyFontInXls(int Sheetindex,int RowIdex, int CellIndex, string fontName, short color, bool istalic, bool IsStrikeout,short size)
1014         { 
1015             InitializeWorkbook();
1016 
1017             ISheet sheet1 = hssfworkbook.GetSheetAt(Sheetindex);
1018 
1019             //font style1: underlined, italic, red color, fontsize=20
1020             IFont font1 = hssfworkbook.CreateFont();
1021             font1.FontName = "宋体";
1022             font1.Color = HSSFColor.RED.index;
1023             font1.IsItalic = istalic;
1024             font1.IsStrikeout = IsStrikeout;
1025             //font1.Underline = (byte)FontUnderlineType.DOUBLE;
1026             font1.FontHeightInPoints = size;
1027             //bind font with style 1
1028 
1029             ICell cell1 = sheet1.GetRow(RowIdex).GetCell(CellIndex);
1030             ICellStyle style1 = hssfworkbook.CreateCellStyle();
1031             style1.SetFont(font1);
1032             cell1.CellStyle = style1;
1033             WriteToFile();
1034         }
1035 
1036         /// <summary>
1037         /// 设置sheet的颜色
1038         /// </summary>
1039         /// <param name="Sheetindex"></param>
1040         /// <param name="RowIdex"></param>
1041         /// <param name="CellIndex"></param>
1042         public void ChangeSheetTabColorInXls(int Sheetindex)
1043         {
1044             InitializeWorkbook();
1045 
1046             ISheet sheet = hssfworkbook.GetSheetAt(Sheetindex);
1047             sheet.TabColorIndex = HSSFColor.AQUA.index;
1048 
1049             WriteToFile();
1050         }
1051 
1052 
1053         public  string GetCellValue(int sheetIndex,int rowIndex,int cellIndex)
1054         {
1055             InitializeWorkbook();
1056 
1057             ISheet sheet1 = hssfworkbook.GetSheetAt(sheetIndex);
1058 
1059             ICell cell=  sheet1.GetRow(rowIndex).GetCell(cellIndex);
1060 
1061             return  cell.StringCellValue;
1062 
1063         }
1064 
1065 
1066 
1067         #region 导入导出
1068         /* 
1069          * DataTable table = new DataTable();     
1070          * MemoryStream ms = DataTableRenderToExcel.RenderDataTableToExcel(table) as MemoryStream;
1071          * Response.AddHeader("Content-Disposition", string.Format("attachment; filename=Download.xls"));
1072          * Response.BinaryWrite(ms.ToArray());
1073          * ms.Close();
1074          * ms.Dispose();
1075        
1076          * if (this.fuUpload.HasFile)
1077          * {
1078          *       DataTable table = DataTableRenderToExcel.RenderDataTableFromExcel(this.fuUpload.FileContent, 1, 0);
1079          *       this.gvExcel.DataSource = table;
1080          *       this.gvExcel.DataBind();
1081          *  }
1082          */
1083         /// <summary>
1084         /// Datatable导出Excel
1085         /// </summary>
1086         /// <param name="SourceTable"></param>
1087         /// <returns></returns>
1088         private static Stream RenderDataTableToExcel(DataTable SourceTable)
1089         {
1090             HSSFWorkbook workbook = new HSSFWorkbook();
1091             MemoryStream ms = new MemoryStream();
1092             ISheet sheet = workbook.CreateSheet();
1093             IRow headerRow = sheet.CreateRow(0);
1094 
1095             // handling header.
1096             foreach (DataColumn column in SourceTable.Columns)
1097                 headerRow.CreateCell(column.Ordinal).SetCellValue(column.ColumnName);
1098 
1099             // handling value.
1100             int rowIndex = 1;
1101 
1102             foreach (DataRow row in SourceTable.Rows)
1103             {
1104                 IRow dataRow = sheet.CreateRow(rowIndex);
1105                 foreach (DataColumn column in SourceTable.Columns)
1106                 {
1107                     dataRow.CreateCell(column.Ordinal).SetCellValue(row[column].ToString());
1108                 }
1109 
1110                 rowIndex++;
1111             }
1112 
1113             workbook.Write(ms);
1114             ms.Flush();
1115             ms.Position = 0;
1116 
1117             sheet = null;
1118             headerRow = null;
1119             workbook = null;
1120 
1121             return ms;
1122         }
1123         /// <summary>
1124         /// Datatable导出Excel
1125         /// </summary>
1126         /// <param name="SourceTable"></param>
1127         /// <param name="FileName"></param>
1128         public static void RenderDataTableToExcel(DataTable SourceTable, string FileName)
1129         {
1130             MemoryStream ms = RenderDataTableToExcel(SourceTable) as MemoryStream;
1131             FileStream fs = new FileStream(FileName, FileMode.Create, FileAccess.Write);
1132             byte[] data = ms.ToArray();
1133 
1134             fs.Write(data, 0, data.Length);
1135             fs.Flush();
1136             fs.Close();
1137 
1138             data = null;
1139             ms = null;
1140             fs = null;
1141         }
1142         /// <summary>
1143         /// 导出excel为Datatable
1144         /// </summary>
1145         /// <param name="ExcelFileStream"></param>
1146         /// <param name="SheetName"></param>
1147         /// <param name="HeaderRowIndex"></param>
1148         /// <returns></returns>
1149         public static DataTable RenderDataTableFromExcel(Stream ExcelFileStream, string SheetName, int HeaderRowIndex)
1150         {
1151             HSSFWorkbook workbook = new HSSFWorkbook(ExcelFileStream);
1152             ISheet sheet = workbook.GetSheet(SheetName);
1153 
1154             DataTable table = new DataTable();
1155 
1156             IRow headerRow = sheet.GetRow(HeaderRowIndex);
1157             int cellCount = headerRow.LastCellNum;
1158 
1159             for (int i = headerRow.FirstCellNum; i < cellCount; i++)
1160             {
1161                 DataColumn column = new DataColumn(headerRow.GetCell(i).StringCellValue);
1162                 table.Columns.Add(column);
1163             }
1164 
1165             int rowCount = sheet.LastRowNum;
1166 
1167             for (int i = (sheet.FirstRowNum + 1); i < sheet.LastRowNum; i++)
1168             {
1169                 IRow row = sheet.GetRow(i);
1170                 DataRow dataRow = table.NewRow();
1171 
1172                 for (int j = row.FirstCellNum; j < cellCount; j++)
1173                     dataRow[j] = row.GetCell(j).ToString();
1174             }
1175 
1176             ExcelFileStream.Close();
1177             workbook = null;
1178             sheet = null;
1179             return table;
1180         }
1181         /// <summary>
1182         /// 将Excel转换为Datatable
1183         /// </summary>
1184         /// <param name="ExcelFileStream"></param>
1185         /// <param name="SheetIndex"></param>
1186         /// <param name="HeaderRowIndex"></param>
1187         /// <returns></returns>
1188         public static DataTable RenderDataTableFromExcel(Stream ExcelFileStream, int SheetIndex, int HeaderRowIndex)
1189         {
1190             HSSFWorkbook workbook = new HSSFWorkbook(ExcelFileStream);
1191             ISheet sheet = workbook.GetSheetAt(SheetIndex);
1192 
1193             DataTable table = new DataTable();
1194 
1195             IRow headerRow = sheet.GetRow(HeaderRowIndex);
1196             int cellCount = headerRow.LastCellNum;
1197 
1198             for (int i = headerRow.FirstCellNum; i < cellCount; i++)
1199             {
1200                 DataColumn column = new DataColumn(headerRow.GetCell(i).StringCellValue);
1201                 table.Columns.Add(column);
1202             }
1203 
1204             int rowCount = sheet.LastRowNum;
1205 
1206             for (int i = (sheet.FirstRowNum + 1); i < sheet.LastRowNum; i++)
1207             {
1208                 IRow row = sheet.GetRow(i);
1209                 DataRow dataRow = table.NewRow();
1210 
1211                 for (int j = row.FirstCellNum; j < cellCount; j++)
1212                 {
1213                     if (row.GetCell(j) != null)
1214                         dataRow[j] = row.GetCell(j).ToString();
1215                 }
1216 
1217                 table.Rows.Add(dataRow);
1218             }
1219 
1220             ExcelFileStream.Close();
1221             workbook = null;
1222             sheet = null;
1223             return table;
1224         }
1225 
1226         #endregion
1227 
1228 
1229     }
1230 }
1231 
1232 NPOIHelper

sheet.SetColumnWidth(8, 20 * 500);  //设置列宽

来源网络:http://www.cnblogs.com/anbylau2130/p/3182495.html#undefined

原文地址:https://www.cnblogs.com/ChinaZhao/p/6381113.html