zoukankan      html  css  js  c++  java
  • 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

  • 相关阅读:
    动态生成 Excel 文件供浏览器下载的注意事项
    JavaEE 中无用技术之 JNDI
    CSDN 泄露用户密码给我们什么启示
    刚发布新的 web 单点登录系统,欢迎下载试用,欢迎提建议
    jQuery jqgrid 对含特殊字符 json 数据的 Java 处理方法
    一个 SQL 同时验证帐号是否存在、密码是否正确
    PostgreSQL 数据库在 Windows Server 2008 上安装注意事项
    快速点评 Spring Struts Hibernate
    Apache NIO 框架 Mina 使用中出现 too many open files 问题的解决办法
    解决 jQuery 版本升级过程中出现 toLowerCase 错误 更改 doctype
  • 原文地址:https://www.cnblogs.com/ChinaZhao/p/6381113.html
Copyright © 2011-2022 走看看