zoukankan      html  css  js  c++  java
  • NPOI帮助类

       1 using System;
       2 using System.Collections.Generic;
       3 using System.Data;
       4 using System.IO;
       5 using System.Text;
       6 using System.Web;
       7 using NPOI;
       8 using NPOI.HPSF;
       9 using NPOI.HSSF;
      10 using NPOI.HSSF.Record;
      11 using NPOI.HSSF.UserModel;
      12 using NPOI.HSSF.Util;
      13 using NPOI.XSSF;
      14 using NPOI.XSSF.UserModel;
      15 using NPOI.XSSF.Util;
      16 using NPOI.POIFS;
      17 using NPOI.SS.UserModel;
      18 using NPOI.Util;
      19 using NPOI.SS;
      20 using NPOI.DDF;
      21 using NPOI.SS.Util;
      22 using System.Collections;
      23 using System.Text.RegularExpressions;
      24 
      25 public class ExcelHelper
      26 {
      27     #region 从datatable中将数据导出到excel
      28     public static HSSFWorkbook ExportWorkbook(DataTable dtSource, string SheetName, string ColumnProperty)
      29     {
      30         HSSFWorkbook workbook = new HSSFWorkbook();
      31         if (SheetName == null || SheetName == "") SheetName = "Sheet1";
      32         HSSFSheet sheet = workbook.CreateSheet(SheetName) as HSSFSheet;
      33 
      34         // 标题样式
      35         HSSFCellStyle headStyle = workbook.CreateCellStyle() as HSSFCellStyle;
      36         headStyle.Alignment = HorizontalAlignment.Center;
      37         headStyle.VerticalAlignment = VerticalAlignment.Center;
      38         headStyle.BorderBottom = NPOI.SS.UserModel.BorderStyle.Thin;
      39         headStyle.BorderLeft = NPOI.SS.UserModel.BorderStyle.Thin;
      40         headStyle.BorderRight = NPOI.SS.UserModel.BorderStyle.Thin;
      41         headStyle.BorderTop = NPOI.SS.UserModel.BorderStyle.Thin;
      42         headStyle.WrapText = true;
      43         HSSFFont font = workbook.CreateFont() as HSSFFont;
      44         font.Boldweight = (short)FontBoldWeight.Bold;
      45         headStyle.SetFont(font);
      46 
      47         //内容样式
      48         HSSFCellStyle cellStyle = workbook.CreateCellStyle() as HSSFCellStyle;
      49         cellStyle.CloneStyleFrom(headStyle);
      50         cellStyle.Alignment = HorizontalAlignment.Center;
      51         font = workbook.CreateFont() as HSSFFont;
      52         font.Boldweight = (short)FontBoldWeight.Normal;
      53         cellStyle.SetFont(font);
      54         HSSFCellStyle cellStyleLeft = workbook.CreateCellStyle() as HSSFCellStyle;
      55         cellStyleLeft.CloneStyleFrom(cellStyle);
      56         cellStyleLeft.Alignment = HorizontalAlignment.Left;
      57         HSSFCellStyle cellStyleRight = workbook.CreateCellStyle() as HSSFCellStyle;
      58         cellStyleRight.CloneStyleFrom(cellStyle);
      59         cellStyleRight.Alignment = HorizontalAlignment.Right;
      60 
      61         int rowIndex = 0;
      62         #region 列头及样式
      63         HSSFRow headerRow = sheet.CreateRow(rowIndex) as HSSFRow;
      64         foreach (DataColumn column in dtSource.Columns)
      65         {
      66             headerRow.CreateCell(column.Ordinal).SetCellValue(column.ColumnName);
      67             headerRow.GetCell(column.Ordinal).CellStyle = headStyle;
      68         }
      69         #endregion
      70         rowIndex++;
      71         foreach (DataRow row in dtSource.Rows)
      72         {
      73             #region 填充内容
      74             HSSFRow dataRow = sheet.CreateRow(rowIndex) as HSSFRow;
      75             foreach (DataColumn column in dtSource.Columns)
      76             {
      77                 HSSFCell newCell = dataRow.CreateCell(column.Ordinal) as HSSFCell;
      78                 newCell.CellStyle = cellStyle;
      79                 AutoSetType(newCell, column, row);
      80             }
      81 
      82             #endregion
      83             rowIndex++;
      84         }
      85         AutoSizeColumns(sheet);
      86 
      87         if (ColumnProperty != null)
      88         {
      89             string[] ColumnArray = ColumnProperty.Split('|');
      90             foreach (string Column in ColumnArray)
      91             {
      92                 string[] ValueArray = Column.Split(',');
      93                 if (ValueArray.Length > 2)
      94                 {
      95                     int cols = int.Parse(ValueArray[1]);
      96                     switch (ValueArray[0].ToString())
      97                     {
      98                         case "Merge":
      99                             int precols = 0;
     100                             int.TryParse(ValueArray[2], out precols);
     101                             GroupCol(sheet, 1, cols, precols);
     102                             break;
     103                         case "Width":
     104                             int columnWidth = 0;
     105                             int.TryParse(ValueArray[2], out columnWidth);
     106                             sheet.SetColumnWidth(cols, columnWidth * 256);
     107                             break;
     108                         case "Align":
     109                             string Value = ValueArray[2].ToString();
     110                             for (int j = 1; j <= sheet.LastRowNum; j++)
     111                             {
     112                                 ICell currentCell = sheet.GetRow(j).GetCell(cols);
     113                                 switch (Value)
     114                                 {
     115                                     case "center":
     116                                         currentCell.CellStyle = cellStyle;
     117                                         break;
     118                                     case "left":
     119                                         currentCell.CellStyle = cellStyleLeft;
     120                                         break;
     121                                     case "right":
     122                                         currentCell.CellStyle = cellStyleRight;
     123                                         break;
     124                                 }
     125                             }
     126                             break;
     127                         case "DataType":
     128                             string Value2 = ValueArray[2].ToString();
     129                             for (int j = 1; j <= sheet.LastRowNum; j++)
     130                             {
     131                                 ICell currentCell = sheet.GetRow(j).GetCell(cols);
     132                                 string drValue = currentCell.ToString();
     133                                 switch (Value2)
     134                                 {
     135                                     case "double":
     136                                         double result;
     137                                         if (double.TryParse(drValue, out result))
     138                                             currentCell.SetCellValue(result);
     139                                         break;
     140                                     case "string":
     141                                         currentCell.SetCellValue(drValue.ToString());
     142                                         break;
     143                                 }
     144                             }
     145                             break;
     146                     }
     147                 }
     148             }
     149         }
     150         return workbook;
     151     }
     152 
     153     /// <summary>
     154     /// DataTable导出到Excel的MemoryStream
     155     /// </summary>
     156     /// <param name="dtSource">源DataTable</param>
     157     public static MemoryStream ExportDT(DataTable dtSource, string SheetName, string ColumnProperty)
     158     {
     159         using (MemoryStream ms = new MemoryStream())
     160         {
     161             HSSFWorkbook workbook = ExportWorkbook(dtSource, SheetName, ColumnProperty);
     162             workbook.Write(ms);
     163             ms.Flush();
     164             ms.Position = 0;
     165             return ms;
     166         }
     167     }
     168 
     169     public static void ExportDTtoExcel(DataTable dtSource, string strFileName, bool SaveFile)
     170     {
     171         ExportDTtoExcel(dtSource, strFileName, SaveFile, null, null);
     172     }
     173 
     174     /// <summary>
     175     /// DataTable导出到Excel文件
     176     /// </summary>
     177     /// <param name="dtSource">源DataTable</param>
     178     /// <param name="sFileName">文件名</param>
     179     /// <param name="SaveFile">是否需保存</param>
     180     /// <param name="SheetName">Sheet名</param>
     181     /// <param name="ColumnProperty">列属性集,多个属性集以"|"分隔,值以","分隔,范例:"Merge,0,0|Align,2,right|Width,4,100|DataType,5,double"</param>
     182     public static void ExportDTtoExcel(DataTable dtSource, string sFileName, bool SaveFile, string SheetName, string ColumnProperty)
     183     {
     184         using (MemoryStream ms = ExportDT(dtSource, SheetName, ColumnProperty))
     185         {
     186             if (SaveFile)
     187             {
     188                 using (FileStream fs = new FileStream(sFileName, FileMode.Create, FileAccess.Write))
     189                 {
     190                     byte[] data = ms.ToArray();
     191                     fs.Write(data, 0, data.Length);
     192                     fs.Flush();
     193                 }
     194                 System.IO.FileInfo fileInfo = new System.IO.FileInfo(sFileName);
     195                 sFileName = fileInfo.Name;
     196             }
     197             System.Web.HttpContext.Current.Response.AddHeader("Content-Disposition", string.Format("attachment;filename=" + HttpUtility.UrlEncode(sFileName)));
     198             System.Web.HttpContext.Current.Response.AddHeader("Content-Length", ms.ToArray().Length.ToString());
     199             System.Web.HttpContext.Current.Response.BinaryWrite(ms.ToArray());
     200             System.Web.HttpContext.Current.Response.Flush();
     201             ms.Close();
     202             ms.Dispose();
     203             System.Web.HttpContext.Current.Response.End();
     204         }
     205     }
     206 
     207     /// <summary>
     208     /// 导出EXCEL,可以导出多个sheet(不设置列宽)
     209     /// </summary>
     210     /// <param name="dtSources">原始数据表</param>
     211     /// <param name="strFileName">文件名</param>
     212     /// <param name="SaveFile">是否需要保存此文件</param>
     213     /// <param name="NeedMargeColumns">需要合并的列,如:3,5</param>
     214     public static void ExportDTtoExcelNoWidth(DataTable[] dtSources, string strFileName, bool SaveFile, string NeedMargeColumns)
     215     {
     216         HSSFWorkbook workbook = new HSSFWorkbook();
     217         if (NeedMargeColumns.Length > 0)
     218         {
     219             NeedMargeColumns = "," + NeedMargeColumns + ",";
     220         }
     221         HSSFCellStyle dateStyle = workbook.CreateCellStyle() as HSSFCellStyle;
     222         HSSFDataFormat format = workbook.CreateDataFormat() as HSSFDataFormat;
     223         dateStyle.DataFormat = format.GetFormat("yyyy-mm-dd");
     224         for (int k = 0; k < dtSources.Length; k++)
     225         {
     226             int[] margeColIndex = new int[dtSources[k].Columns.Count];//保存合并列的起始行
     227             string[] margeColValue = new string[dtSources[k].Columns.Count];//保存合并列对应的上一个值      
     228             HSSFSheet sheet = workbook.CreateSheet(dtSources[k].TableName.ToString()) as HSSFSheet;
     229             //填充表头
     230             HSSFRow dataRow = sheet.CreateRow(0) as HSSFRow;
     231             ICellStyle Headstyle = workbook.CreateCellStyle();
     232             //设置单元格的样式:水平对齐居中
     233             Headstyle.Alignment = HorizontalAlignment.Center;
     234             //新建一个字体样式对象
     235             IFont font = workbook.CreateFont();
     236             //设置字体加粗样式
     237             font.Boldweight = short.MaxValue;
     238             //使用SetFont方法将字体样式添加到单元格样式中 
     239             Headstyle.SetFont(font);
     240             foreach (DataColumn column in dtSources[k].Columns)
     241             {
     242                 margeColIndex[column.Ordinal] = 1;
     243                 margeColValue[column.Ordinal] = "";
     244                 ICell cell = dataRow.CreateCell(column.Ordinal);//创建单元格
     245                 cell.SetCellValue(column.ColumnName);//设置单元格的值
     246                 dataRow.GetCell(column.Ordinal).CellStyle = Headstyle; //将新的样式赋给单元格
     247             }
     248             //填充内容
     249             for (int i = 0; i < dtSources[k].Rows.Count; i++)
     250             {
     251                 dataRow = sheet.CreateRow(i + 1) as HSSFRow;
     252                 for (int j = 0; j < dtSources[k].Columns.Count; j++)
     253                 {
     254                     ICell newCell = dataRow.CreateCell(j);
     255                     bool canSetValue = false;
     256                     if (NeedMargeColumns.Length > 0 && (NeedMargeColumns.IndexOf("," + j.ToString() + ",") != -1)) //有需要合并的列,并且当前列需要合并              
     257                     {
     258                         if (margeColValue[j] == "")
     259                         {
     260                             canSetValue = true;
     261                             margeColIndex[j] = i + 1;
     262                             margeColValue[j] = dtSources[k].Rows[i][j].ToString();
     263                         }
     264                         else if (margeColValue[j] != dtSources[k].Rows[i][j].ToString())//不同的时候需要更新原来储存的值,并重新设置合并
     265                         {
     266                             canSetValue = true;
     267                             //CellRangeAddress四个参数为:起始行,结束行,起始列,结束列
     268                             sheet.AddMergedRegion(new CellRangeAddress(margeColIndex[j], i, j, j));
     269                             margeColIndex[j] = i + 1;
     270                             margeColValue[j] = dtSources[k].Rows[i][j].ToString();
     271                         }
     272                     }
     273                     else
     274                     {
     275                         canSetValue = true;
     276                     }
     277                     if (canSetValue)
     278                     {
     279                         //需要合并的列,1.第一行/最后一行,2.上一行值不同,下一行值相同,则给当前单元格赋值
     280                         switch (dtSources[k].Columns[j].DataType.ToString())
     281                         {
     282                             case "System.String"://字符串类型   
     283                                 newCell.SetCellValue(dtSources[k].Rows[i][j].ToString());
     284                                 break;
     285                             case "System.DateTime"://日期类型   
     286                                 DateTime dateV;
     287                                 DateTime.TryParse(dtSources[k].Rows[i][j].ToString(), out dateV);
     288                                 newCell.SetCellValue(dateV);
     289                                 newCell.CellStyle = dateStyle;//格式化显示   
     290                                 break;
     291                             case "System.Boolean"://布尔型   
     292                                 bool boolV = false;
     293                                 bool.TryParse(dtSources[k].Rows[i][j].ToString(), out boolV);
     294                                 newCell.SetCellValue(boolV);
     295                                 break;
     296                             case "System.Int16"://整型   
     297                             case "System.Int32":
     298                             case "System.Int64":
     299                             case "System.Byte":
     300                                 int intV = 0;
     301                                 int.TryParse(dtSources[k].Rows[i][j].ToString(), out intV);
     302                                 newCell.SetCellValue(intV);
     303                                 break;
     304                             case "System.Decimal"://浮点型   
     305                             case "System.Double":
     306                                 double doubV = 0;
     307                                 double.TryParse(dtSources[k].Rows[i][j].ToString(), out doubV);
     308                                 newCell.SetCellValue(doubV);
     309                                 break;
     310                             case "System.DBNull"://空值处理   
     311                                 newCell.SetCellValue("");
     312                                 break;
     313                             default:
     314                                 newCell.SetCellValue("");
     315                                 break;
     316                         }
     317                     }
     318                 }
     319             }
     320         }
     321         //保存
     322         using (MemoryStream ms = new MemoryStream())
     323         {
     324             workbook.Write(ms);
     325             ms.Flush();
     326             ms.Position = 0;
     327             if (SaveFile)
     328             {
     329                 using (FileStream fs = new FileStream(strFileName, FileMode.Create, FileAccess.Write))
     330                 {
     331                     byte[] data = ms.ToArray();
     332                     fs.Write(data, 0, data.Length);
     333                     fs.Flush();
     334                 }
     335                 System.IO.FileInfo fileInfo = new System.IO.FileInfo(strFileName);
     336                 strFileName = fileInfo.Name;
     337             }
     338             else
     339             {
     340                 System.Web.HttpContext.Current.Response.AddHeader("Content-Disposition", string.Format("attachment;filename=" + HttpUtility.UrlEncode(strFileName)));
     341                 System.Web.HttpContext.Current.Response.AddHeader("Content-Length", ms.ToArray().Length.ToString());
     342                 System.Web.HttpContext.Current.Response.BinaryWrite(ms.ToArray());
     343                 System.Web.HttpContext.Current.Response.Flush();
     344                 ms.Close();
     345                 ms.Dispose();
     346                 System.Web.HttpContext.Current.Response.End();
     347             }
     348         }
     349     }
     350     /// <summary>
     351     /// 导出EXCEL,可以导出多个sheet
     352     /// </summary>
     353     /// <param name="dtSources">原始数据表</param>
     354     /// <param name="strFileName">文件名</param>
     355     /// <param name="SaveFile">是否需要保存此文件</param>
     356     /// <param name="NeedMargeColumns">需要合并的列,如:3,5(表示第三列和第五列各自合并单元格)</param>
     357     public static void ExportDTtoExcel(DataTable[] dtSources, string strFileName, bool SaveFile, string NeedMargeColumns)
     358     {
     359         HSSFWorkbook workbook = new HSSFWorkbook();
     360         if (NeedMargeColumns.Length > 0)
     361         {
     362             NeedMargeColumns = "," + NeedMargeColumns + ",";
     363         }
     364         HSSFCellStyle dateStyle = workbook.CreateCellStyle() as HSSFCellStyle;
     365         HSSFDataFormat format = workbook.CreateDataFormat() as HSSFDataFormat;
     366         dateStyle.DataFormat = format.GetFormat("yyyy-mm-dd");
     367         for (int k = 0; k < dtSources.Length; k++)
     368         {
     369             int[] margeColIndex = new int[dtSources[k].Columns.Count];//保存合并列的起始行
     370             string[] margeColValue = new string[dtSources[k].Columns.Count];//保存合并列对应的上一个值      
     371             HSSFSheet sheet = workbook.CreateSheet(dtSources[k].TableName.ToString()) as HSSFSheet;
     372             //填充表头
     373             HSSFRow dataRow = sheet.CreateRow(0) as HSSFRow;
     374             ICellStyle Headstyle = workbook.CreateCellStyle();
     375             //设置单元格的样式:水平对齐居中
     376             Headstyle.Alignment = HorizontalAlignment.Center;
     377             //新建一个字体样式对象
     378             IFont font = workbook.CreateFont();
     379             //设置字体加粗样式
     380             font.Boldweight = short.MaxValue;
     381             //使用SetFont方法将字体样式添加到单元格样式中 
     382             Headstyle.SetFont(font);
     383 
     384             ICellStyle Rowstyle = workbook.CreateCellStyle();
     385             //设置单元格的样式:垂直对齐居中
     386             Rowstyle.VerticalAlignment = VerticalAlignment.Justify;
     387 
     388             //取得列宽
     389             int[] arrColWidth = new int[dtSources[k].Columns.Count];
     390             foreach (DataColumn item in dtSources[k].Columns)
     391             {
     392                 arrColWidth[item.Ordinal] = Encoding.GetEncoding(936).GetBytes(item.ColumnName.ToString()).Length;
     393                 margeColIndex[item.Ordinal] = 1;
     394                 margeColValue[item.Ordinal] = "";
     395             }
     396             for (int i = 0; i < dtSources[k].Rows.Count; i++)
     397             {
     398                 for (int j = 0; j < dtSources[k].Columns.Count; j++)
     399                 {
     400                     int intTemp = Encoding.GetEncoding(936).GetBytes(dtSources[k].Rows[i][j].ToString()).Length;
     401                     if (intTemp > arrColWidth[j])
     402                     {
     403                         arrColWidth[j] = intTemp;
     404                     }
     405                 }
     406             }
     407             foreach (DataColumn column in dtSources[k].Columns)
     408             {
     409                 ICell cell = dataRow.CreateCell(column.Ordinal);//创建单元格
     410                 cell.SetCellValue(column.ColumnName);//设置单元格的值
     411                 dataRow.GetCell(column.Ordinal).CellStyle = Headstyle; //将新的样式赋给单元格
     412                 //设置列宽
     413                 //sheet.SetColumnWidth(column.Ordinal, (arrColWidth[column.Ordinal] + 1) * 256);
     414                 if (arrColWidth[column.Ordinal] > 255)
     415                 {
     416                     arrColWidth[column.Ordinal] = 254;
     417                 }
     418                 else
     419                 {
     420                     sheet.SetColumnWidth(column.Ordinal, (arrColWidth[column.Ordinal] + 1) * 256);
     421                 }
     422             }
     423             //填充内容
     424             for (int i = 0; i < dtSources[k].Rows.Count; i++)
     425             {
     426                 dataRow = sheet.CreateRow(i + 1) as HSSFRow;
     427                 for (int j = 0; j < dtSources[k].Columns.Count; j++)
     428                 {
     429                     ICell newCell = dataRow.CreateCell(j);
     430                     bool canSetValue = false;
     431                     if (NeedMargeColumns.Length > 0 && (NeedMargeColumns.IndexOf("," + j.ToString() + ",") != -1)) //有需要合并的列,并且当前列需要合并              
     432                     {
     433                         if (margeColValue[j] == "")
     434                         {
     435                             canSetValue = true;
     436                             margeColIndex[j] = i + 1;
     437                             margeColValue[j] = dtSources[k].Rows[i][j].ToString();
     438                         }
     439                         else if (margeColValue[j] != dtSources[k].Rows[i][j].ToString())//不同的时候需要更新原来储存的值,并重新设置合并
     440                         {
     441                             canSetValue = true;
     442                             //CellRangeAddress四个参数为:起始行,结束行,起始列,结束列
     443                             sheet.AddMergedRegion(new CellRangeAddress(margeColIndex[j], i, j, j));
     444                             margeColIndex[j] = i + 1;
     445                             margeColValue[j] = dtSources[k].Rows[i][j].ToString();
     446                             newCell.CellStyle = Rowstyle;
     447                         }
     448                         else if (i == dtSources[k].Rows.Count - 1 && i != 0)//最后一行强制合并
     449                         {
     450                             //值相同本来是不用做任何事,但是最后一行,则需要合并
     451                             sheet.AddMergedRegion(new CellRangeAddress(margeColIndex[j], i + 1, j, j));
     452                             newCell.CellStyle = Rowstyle;
     453                         }
     454                     }
     455                     else
     456                     {
     457                         canSetValue = true;
     458                     }
     459                     if (canSetValue)
     460                     {
     461                         //需要合并的列,1.第一行/最后一行,2.上一行值不同,下一行值相同,则给当前单元格赋值
     462                         switch (dtSources[k].Columns[j].DataType.ToString())
     463                         {
     464                             case "System.String"://字符串类型   
     465                                 newCell.SetCellValue(dtSources[k].Rows[i][j].ToString());
     466                                 break;
     467                             case "System.DateTime"://日期类型   
     468                                 DateTime dateV;
     469                                 DateTime.TryParse(dtSources[k].Rows[i][j].ToString(), out dateV);
     470                                 newCell.SetCellValue(dateV);
     471                                 newCell.CellStyle = dateStyle;//格式化显示   
     472                                 break;
     473                             case "System.Boolean"://布尔型   
     474                                 bool boolV = false;
     475                                 bool.TryParse(dtSources[k].Rows[i][j].ToString(), out boolV);
     476                                 newCell.SetCellValue(boolV);
     477                                 break;
     478                             case "System.Int16"://整型   
     479                             case "System.Int32":
     480                             case "System.Int64":
     481                             case "System.Byte":
     482                                 int intV = 0;
     483                                 int.TryParse(dtSources[k].Rows[i][j].ToString(), out intV);
     484                                 newCell.SetCellValue(intV);
     485                                 break;
     486                             case "System.Decimal"://浮点型   
     487                             case "System.Double":
     488                                 double doubV = 0;
     489                                 double.TryParse(dtSources[k].Rows[i][j].ToString(), out doubV);
     490                                 newCell.SetCellValue(doubV);
     491                                 break;
     492                             case "System.DBNull"://空值处理   
     493                                 newCell.SetCellValue("");
     494                                 break;
     495                             default:
     496                                 newCell.SetCellValue("");
     497                                 break;
     498                         }
     499                     }
     500                 }
     501             }
     502         }
     503         //保存
     504         using (MemoryStream ms = new MemoryStream())
     505         {
     506             workbook.Write(ms);
     507             ms.Flush();
     508             ms.Position = 0;
     509             if (SaveFile)
     510             {
     511                 using (FileStream fs = new FileStream(strFileName, FileMode.Create, FileAccess.Write))
     512                 {
     513                     byte[] data = ms.ToArray();
     514                     fs.Write(data, 0, data.Length);
     515                     fs.Flush();
     516                 }
     517                 System.IO.FileInfo fileInfo = new System.IO.FileInfo(strFileName);
     518                 strFileName = fileInfo.Name;
     519             }
     520             System.Web.HttpContext.Current.Response.AddHeader("Content-Disposition", string.Format("attachment;filename=" + HttpUtility.UrlEncode(strFileName)));
     521             System.Web.HttpContext.Current.Response.AddHeader("Content-Length", ms.ToArray().Length.ToString());
     522             System.Web.HttpContext.Current.Response.BinaryWrite(ms.ToArray());
     523             System.Web.HttpContext.Current.Response.Flush();
     524             ms.Close();
     525             ms.Dispose();
     526             System.Web.HttpContext.Current.Response.End();
     527         }
     528     }
     529     /// <summary>
     530     /// 导出EXCEL,可以导出多个sheet
     531     /// </summary>
     532     /// <param name="dtSources">原始数据表</param>
     533     /// <param name="strFileName">文件名</param>
     534     /// <param name="SaveFile">是否需要保存此文件</param>
     535     /// <param name="NeedMargeColumns">需要合并的列,如:3,5(表示第三列和第五列各自合并单元格)或者3,3:5(表示第三列合并,然后第五列合并时参考第三列再合并)</param>
     536     public static void ExportDTtoExcelExt(DataTable[] dtSources, string strFileName, bool SaveFile, string NeedMargeColumns)
     537     {
     538         HSSFWorkbook workbook = new HSSFWorkbook();
     539         if (NeedMargeColumns.Length > 0)
     540         {
     541             NeedMargeColumns = "," + NeedMargeColumns + ",";
     542         }
     543         HSSFCellStyle dateStyle = workbook.CreateCellStyle() as HSSFCellStyle;
     544         HSSFDataFormat format = workbook.CreateDataFormat() as HSSFDataFormat;
     545         dateStyle.DataFormat = format.GetFormat("yyyy-mm-dd");
     546         for (int k = 0; k < dtSources.Length; k++)
     547         {
     548             int[] margeColIndex = new int[dtSources[k].Columns.Count];//保存合并列的起始行
     549             string[] margeColValue = new string[dtSources[k].Columns.Count];//保存合并列对应的上一个值      
     550             HSSFSheet sheet = workbook.CreateSheet(dtSources[k].TableName.ToString()) as HSSFSheet;
     551             //填充表头
     552             HSSFRow dataRow = sheet.CreateRow(0) as HSSFRow;
     553             ICellStyle Headstyle = workbook.CreateCellStyle();
     554             //设置单元格的样式:水平对齐居中
     555             Headstyle.Alignment = HorizontalAlignment.Center;
     556             //新建一个字体样式对象
     557             IFont font = workbook.CreateFont();
     558             //设置字体加粗样式
     559             font.Boldweight = short.MaxValue;
     560             //使用SetFont方法将字体样式添加到单元格样式中 
     561             Headstyle.SetFont(font);
     562 
     563             ICellStyle Rowstyle = workbook.CreateCellStyle();
     564             //设置单元格的样式:垂直对齐居中
     565             Rowstyle.VerticalAlignment = VerticalAlignment.Justify;
     566 
     567             //取得列宽
     568             int[] arrColWidth = new int[dtSources[k].Columns.Count];
     569             foreach (DataColumn item in dtSources[k].Columns)
     570             {
     571                 arrColWidth[item.Ordinal] = Encoding.GetEncoding(936).GetBytes(item.ColumnName.ToString()).Length;
     572                 margeColIndex[item.Ordinal] = 1;
     573                 margeColValue[item.Ordinal] = "";
     574             }
     575             for (int i = 0; i < dtSources[k].Rows.Count; i++)
     576             {
     577                 for (int j = 0; j < dtSources[k].Columns.Count; j++)
     578                 {
     579                     int intTemp = Encoding.GetEncoding(936).GetBytes(dtSources[k].Rows[i][j].ToString()).Length;
     580                     if (intTemp > arrColWidth[j])
     581                     {
     582                         arrColWidth[j] = intTemp;
     583                     }
     584                 }
     585             }
     586             foreach (DataColumn column in dtSources[k].Columns)
     587             {
     588                 ICell cell = dataRow.CreateCell(column.Ordinal);//创建单元格
     589                 cell.SetCellValue(column.ColumnName);//设置单元格的值
     590                 dataRow.GetCell(column.Ordinal).CellStyle = Headstyle; //将新的样式赋给单元格
     591                                                                        //设置列宽
     592                                                                        //sheet.SetColumnWidth(column.Ordinal, (arrColWidth[column.Ordinal] + 1) * 256);
     593 
     594                 if (arrColWidth[column.Ordinal] >= 255)
     595                 {
     596                     arrColWidth[column.Ordinal] = 254;
     597                 }
     598                 else
     599                 {
     600                     sheet.SetColumnWidth(column.Ordinal, (arrColWidth[column.Ordinal] + 1) * 256);
     601                 }
     602             }
     603             //填充内容
     604             for (int i = 0; i < dtSources[k].Rows.Count; i++)
     605             {
     606                 dataRow = sheet.CreateRow(i + 1) as HSSFRow;
     607                 for (int j = 0; j < dtSources[k].Columns.Count; j++)
     608                 {
     609                     ICell newCell = dataRow.CreateCell(j);
     610                     bool canSetValue = false;
     611                     if (NeedMargeColumns.Length > 0 && (NeedMargeColumns.IndexOf("," + j.ToString() + ",") != -1 || NeedMargeColumns.IndexOf(":" + j.ToString() + ",") != -1)) //有需要合并的列,并且当前列需要合并              
     612                     {
     613                         if (margeColValue[j] == "")
     614                         {
     615                             canSetValue = true;
     616                             margeColIndex[j] = i + 1;
     617                             margeColValue[j] = dtSources[k].Rows[i][j].ToString();
     618                         }
     619                         else if (NeedMargeColumns.IndexOf("," + j.ToString() + ",") != -1)//单独列合并
     620                         {
     621                             if (margeColValue[j] != dtSources[k].Rows[i][j].ToString())//不同的时候需要更新原来储存的值,并重新设置合并
     622                             {
     623                                 canSetValue = true;
     624                                 //CellRangeAddress四个参数为:起始行,结束行,起始列,结束列
     625                                 sheet.AddMergedRegion(new CellRangeAddress(margeColIndex[j], i, j, j));
     626                                 margeColIndex[j] = i + 1;
     627                                 margeColValue[j] = dtSources[k].Rows[i][j].ToString();
     628                                 newCell.CellStyle = Rowstyle;
     629                             }
     630                             else if (i == dtSources[k].Rows.Count - 1 && i != 0)//最后一行强制合并
     631                             {
     632                                 //值相同本来是不用做任何事,但是最后一行,则需要合并
     633                                 sheet.AddMergedRegion(new CellRangeAddress(margeColIndex[j], i + 1, j, j));
     634                                 newCell.CellStyle = Rowstyle;
     635                             }
     636                         }
     637                         else//参考前列合并
     638                         {
     639                             //获取前列
     640                             int refercol = 0;
     641                             string[] MargeCols = NeedMargeColumns.Split(',');
     642                             for (int dd = 0; dd < MargeCols.Length; dd++)
     643                             {
     644                                 if (MargeCols[dd].Length > 0 && ("," + MargeCols[dd] + ",").IndexOf(":" + j.ToString() + ",") != -1)
     645                                 {
     646                                     refercol = Convert.ToInt32(MargeCols[dd].Substring(0, MargeCols[dd].IndexOf(":")));
     647                                     break;
     648                                 }
     649                             }
     650                             if (dtSources[k].Rows[i - 1][refercol].ToString() != dtSources[k].Rows[i][refercol].ToString())
     651                             {
     652                                 canSetValue = true;
     653                                 //CellRangeAddress四个参数为:起始行,结束行,起始列,结束列
     654                                 sheet.AddMergedRegion(new CellRangeAddress(margeColIndex[j], i, j, j));
     655                                 margeColIndex[j] = i + 1;
     656                                 margeColValue[j] = dtSources[k].Rows[i][j].ToString();
     657                                 newCell.CellStyle = Rowstyle;
     658                             }
     659                             else if (margeColValue[j] != dtSources[k].Rows[i][j].ToString())//不同的时候需要更新原来储存的值,并重新设置合并
     660                             {
     661                                 canSetValue = true;
     662                                 //CellRangeAddress四个参数为:起始行,结束行,起始列,结束列
     663                                 sheet.AddMergedRegion(new CellRangeAddress(margeColIndex[j], i, j, j));
     664                                 margeColIndex[j] = i + 1;
     665                                 margeColValue[j] = dtSources[k].Rows[i][j].ToString();
     666                                 newCell.CellStyle = Rowstyle;
     667                             }
     668                             else if (i == dtSources[k].Rows.Count - 1 && i != 0)//最后一行强制合并
     669                             {
     670                                 //值相同本来是不用做任何事,但是最后一行,则需要合并
     671                                 sheet.AddMergedRegion(new CellRangeAddress(margeColIndex[j], i + 1, j, j));
     672                                 newCell.CellStyle = Rowstyle;
     673                             }
     674                         }
     675                     }
     676                     else
     677                     {
     678                         canSetValue = true;
     679                     }
     680                     if (canSetValue)
     681                     {
     682                         #region 需要合并的列,1.第一行/最后一行,2.上一行值不同,下一行值相同,则给当前单元格赋值
     683                         switch (dtSources[k].Columns[j].DataType.ToString())
     684                         {
     685                             case "System.String"://字符串类型   
     686                                 newCell.SetCellValue(dtSources[k].Rows[i][j].ToString());
     687                                 break;
     688                             case "System.DateTime"://日期类型   
     689                                 DateTime dateV;
     690                                 DateTime.TryParse(dtSources[k].Rows[i][j].ToString(), out dateV);
     691                                 newCell.SetCellValue(dateV);
     692                                 newCell.CellStyle = dateStyle;//格式化显示   
     693                                 break;
     694                             case "System.Boolean"://布尔型   
     695                                 bool boolV = false;
     696                                 bool.TryParse(dtSources[k].Rows[i][j].ToString(), out boolV);
     697                                 newCell.SetCellValue(boolV);
     698                                 break;
     699                             case "System.Int16"://整型   
     700                             case "System.Int32":
     701                             case "System.Int64":
     702                             case "System.Byte":
     703                                 int intV = 0;
     704                                 int.TryParse(dtSources[k].Rows[i][j].ToString(), out intV);
     705                                 newCell.SetCellValue(intV);
     706                                 break;
     707                             case "System.Decimal"://浮点型   
     708                             case "System.Double":
     709                                 double doubV = 0;
     710                                 double.TryParse(dtSources[k].Rows[i][j].ToString(), out doubV);
     711                                 newCell.SetCellValue(doubV);
     712                                 break;
     713                             case "System.DBNull"://空值处理   
     714                                 newCell.SetCellValue("");
     715                                 break;
     716                             default:
     717                                 newCell.SetCellValue("");
     718                                 break;
     719                         }
     720                         #endregion
     721                     }
     722                 }
     723             }
     724         }
     725         //保存
     726         using (MemoryStream ms = new MemoryStream())
     727         {
     728             workbook.Write(ms);
     729             ms.Flush();
     730             ms.Position = 0;
     731             if (SaveFile)
     732             {
     733                 using (FileStream fs = new FileStream(strFileName, FileMode.Create, FileAccess.Write))
     734                 {
     735                     byte[] data = ms.ToArray();
     736                     fs.Write(data, 0, data.Length);
     737                     fs.Flush();
     738                 }
     739                 System.IO.FileInfo fileInfo = new System.IO.FileInfo(strFileName);
     740                 strFileName = fileInfo.Name;
     741             }
     742             System.Web.HttpContext.Current.Response.AddHeader("Content-Disposition", string.Format("attachment;filename=" + HttpUtility.UrlEncode(strFileName)));
     743             System.Web.HttpContext.Current.Response.AddHeader("Content-Length", ms.ToArray().Length.ToString());
     744             System.Web.HttpContext.Current.Response.BinaryWrite(ms.ToArray());
     745             System.Web.HttpContext.Current.Response.Flush();
     746             ms.Close();
     747             ms.Dispose();
     748             System.Web.HttpContext.Current.Response.End();
     749         }
     750     }
     751     #endregion
     752 
     753     #region 从excel中将数据导出到datatable
     754     /// <summary>读取excel
     755     /// 默认第一行为标头
     756     /// </summary>
     757     /// <param name="strFileName">excel文档路径</param>
     758     /// <returns></returns>
     759     public static DataTable ImportExceltoDt(string strFileName)
     760     {
     761         DataTable dt = new DataTable();
     762         IWorkbook wk = null;
     763         using (FileStream file = new FileStream(strFileName, FileMode.Open, FileAccess.Read))
     764         {
     765             if (strFileName.EndsWith(".xlsx"))
     766                 wk = new XSSFWorkbook(file);
     767             else
     768                 wk = new HSSFWorkbook(file);
     769         }
     770         ISheet sheet = wk.GetSheetAt(0) as ISheet;
     771         dt = ImportDt(sheet, 0, true);
     772         return dt;
     773     }
     774 
     775     /// <summary>
     776     /// 读取excel
     777     /// </summary>
     778     /// <param name="strFileName">excel文件路径</param>
     779     /// <param name="sheet">需要导出的sheet</param>
     780     /// <param name="HeaderRowIndex">列头所在行号,-1表示没有列头</param>
     781     /// <returns></returns>
     782     public static DataTable ImportExceltoDt(string strFileName, string SheetName, int HeaderRowIndex)
     783     {
     784         DataTable dt = new DataTable();
     785         IWorkbook wk = null;
     786         using (FileStream file = new FileStream(strFileName, FileMode.Open, FileAccess.Read))
     787         {
     788             if (strFileName.EndsWith(".xlsx"))
     789                 wk = new XSSFWorkbook(file);
     790             else
     791                 wk = new HSSFWorkbook(file);
     792         }
     793         ISheet sheet = wk.GetSheet(SheetName) as ISheet;
     794         dt = ImportDt(sheet, HeaderRowIndex, true);
     795         //ExcelFileStream.Close();
     796         wk = null;
     797         sheet = null;
     798         return dt;
     799     }
     800 
     801     /// <summary>
     802     /// 读取excel
     803     /// </summary>
     804     /// <param name="strFileName">excel文件路径</param>
     805     /// <param name="sheet">需要导出的sheet序号</param>
     806     /// <param name="HeaderRowIndex">列头所在行号,-1表示没有列头</param>
     807     /// <returns></returns>
     808     public static DataTable ImportExceltoDt(string strFileName, int SheetIndex, int HeaderRowIndex)
     809     {
     810         DataTable dt = new DataTable();
     811         IWorkbook wk = null;
     812         using (FileStream file = new FileStream(strFileName, FileMode.Open, FileAccess.Read))
     813         {
     814             if (strFileName.EndsWith(".xlsx"))
     815                 wk = new XSSFWorkbook(file);
     816             else
     817                 wk = new HSSFWorkbook(file);
     818         }
     819         ISheet sheet = wk.GetSheetAt(SheetIndex) as ISheet;
     820         dt = ImportDt(sheet, HeaderRowIndex, true);
     821         //ExcelFileStream.Close();
     822         wk = null;
     823         sheet = null;
     824         return dt;
     825     }
     826 
     827     /// <summary>
     828     /// 读取excel
     829     /// </summary>
     830     /// <param name="strFileName">excel文件路径</param>
     831     /// <param name="sheet">需要导出的sheet</param>
     832     /// <param name="HeaderRowIndex">列头所在行号,-1表示没有列头</param>
     833     /// <returns></returns>
     834     public static DataTable ImportExceltoDt(string strFileName, string SheetName, int HeaderRowIndex, bool needHeader)
     835     {
     836         DataTable dt = new DataTable();
     837         IWorkbook wk = null;
     838         using (FileStream file = new FileStream(strFileName, FileMode.Open, FileAccess.Read))
     839         {
     840             if (strFileName.EndsWith(".xlsx"))
     841                 wk = new XSSFWorkbook(file);
     842             else
     843                 wk = new HSSFWorkbook(file);
     844         }
     845         ISheet sheet = wk.GetSheet(SheetName) as ISheet;
     846         dt = ImportDt(sheet, HeaderRowIndex, needHeader);
     847         wk = null;
     848         sheet = null;
     849         return dt;
     850     }
     851 
     852     /// <summary>
     853     /// 读取excel
     854     /// </summary>
     855     /// <param name="strFileName">excel文件路径</param>
     856     /// <param name="sheet">需要导出的sheet序号</param>
     857     /// <param name="HeaderRowIndex">列头所在行号,-1表示没有列头</param>
     858     /// <returns></returns>
     859     public static DataTable ImportExceltoDt(string strFileName, int SheetIndex, int HeaderRowIndex, bool needHeader)
     860     {
     861         DataTable dt = new DataTable();
     862         IWorkbook wk = null;
     863         using (FileStream file = new FileStream(strFileName, FileMode.Open, FileAccess.Read))
     864         {
     865             if (strFileName.EndsWith(".xlsx"))
     866                 wk = new XSSFWorkbook(file);
     867             else
     868                 wk = new HSSFWorkbook(file);
     869         }
     870         ISheet sheet = wk.GetSheetAt(SheetIndex) as ISheet;
     871         dt = ImportDt(sheet, HeaderRowIndex, needHeader);
     872         wk = null;
     873         sheet = null;
     874         return dt;
     875     }
     876 
     877     /// <summary>
     878     /// 将制定sheet中的数据导出到datatable中
     879     /// </summary>
     880     /// <param name="sheet">需要导出的sheet</param>
     881     /// <param name="HeaderRowIndex">列头所在行号,-1表示没有列头</param>
     882     /// <returns></returns>
     883     static DataTable ImportDt(ISheet sheet, int HeaderRowIndex, bool needHeader)
     884     {
     885         DataTable table = new DataTable();
     886         IRow headerRow;
     887         int cellCount;
     888         try
     889         {
     890             if (HeaderRowIndex < 0 || !needHeader)
     891             {
     892                 headerRow = sheet.GetRow(0) as IRow;
     893                 cellCount = headerRow.LastCellNum;
     894 
     895                 for (int i = headerRow.FirstCellNum; i <= cellCount; i++)
     896                 {
     897                     DataColumn column = new DataColumn(Convert.ToString("F" + (i + 1).ToString()));
     898                     table.Columns.Add(column);
     899                 }
     900             }
     901             else
     902             {
     903                 headerRow = sheet.GetRow(HeaderRowIndex) as IRow;
     904                 cellCount = headerRow.LastCellNum;
     905 
     906                 for (int i = headerRow.FirstCellNum; i <= cellCount; i++)
     907                 {
     908                     if (headerRow.GetCell(i) == null)
     909                     {
     910                         if (table.Columns.IndexOf(Convert.ToString(i)) > 0)
     911                         {
     912                             DataColumn column = new DataColumn(Convert.ToString("重复列名" + i));
     913                             table.Columns.Add(column);
     914                         }
     915                         else
     916                         {
     917                             DataColumn column = new DataColumn(Convert.ToString(i));
     918                             table.Columns.Add(column);
     919                         }
     920 
     921                     }
     922                     else if (table.Columns.IndexOf(headerRow.GetCell(i).ToString()) > 0)
     923                     {
     924                         DataColumn column = new DataColumn(Convert.ToString("重复列名" + i));
     925                         table.Columns.Add(column);
     926                     }
     927                     else
     928                     {
     929                         DataColumn column = new DataColumn(headerRow.GetCell(i).ToString());
     930                         table.Columns.Add(column);
     931                     }
     932                 }
     933             }
     934             int rowCount = sheet.LastRowNum;
     935             for (int i = (HeaderRowIndex + 1); i <= sheet.LastRowNum; i++)
     936             {
     937                 try
     938                 {
     939                     IRow row;
     940                     if (sheet.GetRow(i) == null)
     941                     {
     942                         row = sheet.CreateRow(i) as IRow;
     943                     }
     944                     else
     945                     {
     946                         row = sheet.GetRow(i) as IRow;
     947                     }
     948 
     949                     DataRow dataRow = table.NewRow();
     950 
     951                     for (int j = row.FirstCellNum; j <= cellCount; j++)
     952                     {
     953                         try
     954                         {
     955                             if (row.GetCell(j) != null)
     956                             {
     957                                 switch (row.GetCell(j).CellType)
     958                                 {
     959                                     case CellType.String:
     960                                         string str = row.GetCell(j).StringCellValue;
     961                                         if (str != null && str.Length > 0)
     962                                         {
     963                                             dataRow[j] = str.ToString();
     964                                         }
     965                                         else
     966                                         {
     967                                             dataRow[j] = null;
     968                                         }
     969                                         break;
     970                                     case CellType.Numeric:
     971                                         if (DateUtil.IsCellDateFormatted(row.GetCell(j)))
     972                                         {
     973                                             dataRow[j] = DateTime.FromOADate(row.GetCell(j).NumericCellValue);
     974                                         }
     975                                         else
     976                                         {
     977                                             dataRow[j] = Convert.ToDouble(row.GetCell(j).NumericCellValue);
     978                                         }
     979                                         break;
     980                                     case CellType.Boolean:
     981                                         dataRow[j] = Convert.ToString(row.GetCell(j).BooleanCellValue);
     982                                         break;
     983                                     case CellType.Error:
     984                                         dataRow[j] = row.GetCell(j).ErrorCellValue;
     985                                         break;
     986                                     case CellType.Formula:
     987                                         switch (row.GetCell(j).CachedFormulaResultType)
     988                                         {
     989                                             case CellType.String:
     990                                                 string strFORMULA = row.GetCell(j).StringCellValue;
     991                                                 if (strFORMULA != null && strFORMULA.Length > 0)
     992                                                 {
     993                                                     dataRow[j] = strFORMULA.ToString();
     994                                                 }
     995                                                 else
     996                                                 {
     997                                                     dataRow[j] = null;
     998                                                 }
     999                                                 break;
    1000                                             case CellType.Numeric:
    1001                                                 dataRow[j] = Convert.ToString(row.GetCell(j).NumericCellValue);
    1002                                                 break;
    1003                                             case CellType.Boolean:
    1004                                                 dataRow[j] = Convert.ToString(row.GetCell(j).BooleanCellValue);
    1005                                                 break;
    1006                                             case CellType.Error:
    1007                                                 dataRow[j] = row.GetCell(j).ErrorCellValue;
    1008                                                 break;
    1009                                             default:
    1010                                                 dataRow[j] = "";
    1011                                                 break;
    1012                                         }
    1013                                         break;
    1014                                     default:
    1015                                         dataRow[j] = "";
    1016                                         break;
    1017                                 }
    1018                             }
    1019                         }
    1020                         catch (Exception)
    1021                         {
    1022                             //wl.WriteLogs(exception.ToString());
    1023                         }
    1024                     }
    1025                     table.Rows.Add(dataRow);
    1026                 }
    1027                 catch (Exception)
    1028                 {
    1029                     //wl.WriteLogs(exception.ToString());
    1030                 }
    1031             }
    1032         }
    1033         catch (Exception)
    1034         {
    1035             //wl.WriteLogs(exception.ToString());
    1036         }
    1037         return table;
    1038     }
    1039     #endregion
    1040 
    1041     #region 更新excel中的数据
    1042     /// <summary>
    1043     /// 更新Excel表格
    1044     /// </summary>
    1045     /// <param name="outputFile">需更新的excel表格路径</param>
    1046     /// <param name="sheetname">sheet名</param>
    1047     /// <param name="updateData">需更新的数据</param>
    1048     /// <param name="coluid">需更新的列号</param>
    1049     /// <param name="rowid">需更新的开始行号</param>
    1050     public static void UpdateExcel(string outputFile, int sheetIndex, string[] updateData, int coluid, int rowid)
    1051     {
    1052         FileStream readfile = new FileStream(outputFile, FileMode.Open, FileAccess.Read);
    1053 
    1054         HSSFWorkbook hssfworkbook = new HSSFWorkbook(readfile);
    1055         ISheet sheet1 = hssfworkbook.GetSheetAt(sheetIndex);
    1056         for (int i = 0; i < updateData.Length; i++)
    1057         {
    1058             try
    1059             {
    1060                 if (sheet1.GetRow(i + rowid) == null)
    1061                 {
    1062                     sheet1.CreateRow(i + rowid);
    1063                 }
    1064                 if (sheet1.GetRow(i + rowid).GetCell(coluid) == null)
    1065                 {
    1066                     sheet1.GetRow(i + rowid).CreateCell(coluid);
    1067                 }
    1068 
    1069                 sheet1.GetRow(i + rowid).GetCell(coluid).SetCellValue(updateData[i]);
    1070             }
    1071             catch (Exception ex)
    1072             {
    1073                 // wl.WriteLogs(ex.ToString());
    1074                 throw;
    1075             }
    1076         }
    1077         try
    1078         {
    1079             readfile.Close();
    1080             FileStream writefile = new FileStream(outputFile, FileMode.Create, FileAccess.Write);
    1081             hssfworkbook.Write(writefile);
    1082             writefile.Close();
    1083         }
    1084         catch (Exception ex)
    1085         {
    1086             // wl.WriteLogs(ex.ToString());
    1087         }
    1088 
    1089     }
    1090 
    1091     /// <summary>
    1092     /// 更新Excel表格
    1093     /// </summary>
    1094     /// <param name="outputFile">需更新的excel表格路径</param>
    1095     /// <param name="sheetname">sheet名</param>
    1096     /// <param name="updateData">需更新的数据</param>
    1097     /// <param name="coluids">需更新的列号</param>
    1098     /// <param name="rowid">需更新的开始行号</param>
    1099     public static void UpdateExcel(string outputFile, int sheetIndex, string[][] updateData, int[] coluids, int rowid)
    1100     {
    1101         FileStream readfile = new FileStream(outputFile, FileMode.Open, FileAccess.Read);
    1102 
    1103         HSSFWorkbook hssfworkbook = new HSSFWorkbook(readfile);
    1104         readfile.Close();
    1105         ISheet sheet1 = hssfworkbook.GetSheetAt(sheetIndex);
    1106         for (int j = 0; j < coluids.Length; j++)
    1107         {
    1108             for (int i = 0; i < updateData[j].Length; i++)
    1109             {
    1110                 try
    1111                 {
    1112                     if (sheet1.GetRow(i + rowid) == null)
    1113                     {
    1114                         sheet1.CreateRow(i + rowid);
    1115                     }
    1116                     if (sheet1.GetRow(i + rowid).GetCell(coluids[j]) == null)
    1117                     {
    1118                         sheet1.GetRow(i + rowid).CreateCell(coluids[j]);
    1119                     }
    1120                     sheet1.GetRow(i + rowid).GetCell(coluids[j]).SetCellValue(updateData[j][i]);
    1121                 }
    1122                 catch (Exception ex)
    1123                 {
    1124                     // wl.WriteLogs(ex.ToString());
    1125                 }
    1126             }
    1127         }
    1128         try
    1129         {
    1130             FileStream writefile = new FileStream(outputFile, FileMode.Create);
    1131             hssfworkbook.Write(writefile);
    1132             writefile.Close();
    1133         }
    1134         catch (Exception ex)
    1135         {
    1136             //wl.WriteLogs(ex.ToString());
    1137         }
    1138     }
    1139 
    1140     /// <summary>
    1141     /// 更新Excel表格
    1142     /// </summary>
    1143     /// <param name="outputFile">需更新的excel表格路径</param>
    1144     /// <param name="sheetname">sheet名</param>
    1145     /// <param name="updateData">需更新的数据</param>
    1146     /// <param name="coluid">需更新的列号</param>
    1147     /// <param name="rowid">需更新的开始行号</param>
    1148     public static void UpdateExcel(string outputFile, int sheetIndex, double[] updateData, int coluid, int rowid)
    1149     {
    1150         FileStream readfile = new FileStream(outputFile, FileMode.Open, FileAccess.Read);
    1151 
    1152         HSSFWorkbook hssfworkbook = new HSSFWorkbook(readfile);
    1153         ISheet sheet1 = hssfworkbook.GetSheetAt(sheetIndex);
    1154         for (int i = 0; i < updateData.Length; i++)
    1155         {
    1156             try
    1157             {
    1158                 if (sheet1.GetRow(i + rowid) == null)
    1159                 {
    1160                     sheet1.CreateRow(i + rowid);
    1161                 }
    1162                 if (sheet1.GetRow(i + rowid).GetCell(coluid) == null)
    1163                 {
    1164                     sheet1.GetRow(i + rowid).CreateCell(coluid);
    1165                 }
    1166 
    1167                 sheet1.GetRow(i + rowid).GetCell(coluid).SetCellValue(updateData[i]);
    1168             }
    1169             catch (Exception ex)
    1170             {
    1171                 //wl.WriteLogs(ex.ToString());
    1172                 throw;
    1173             }
    1174         }
    1175         try
    1176         {
    1177             readfile.Close();
    1178             FileStream writefile = new FileStream(outputFile, FileMode.Create, FileAccess.Write);
    1179             hssfworkbook.Write(writefile);
    1180             writefile.Close();
    1181         }
    1182         catch (Exception ex)
    1183         {
    1184             //wl.WriteLogs(ex.ToString());
    1185         }
    1186 
    1187     }
    1188 
    1189     /// <summary>
    1190     /// 更新Excel表格
    1191     /// </summary>
    1192     /// <param name="outputFile">需更新的excel表格路径</param>
    1193     /// <param name="sheetname">sheet名</param>
    1194     /// <param name="updateData">需更新的数据</param>
    1195     /// <param name="coluids">需更新的列号</param>
    1196     /// <param name="rowid">需更新的开始行号</param>
    1197     public static void UpdateExcel(string outputFile, int sheetIndex, double[][] updateData, int[] coluids, int rowid)
    1198     {
    1199         FileStream readfile = new FileStream(outputFile, FileMode.Open, FileAccess.Read);
    1200 
    1201         HSSFWorkbook hssfworkbook = new HSSFWorkbook(readfile);
    1202         readfile.Close();
    1203         ISheet sheet1 = hssfworkbook.GetSheetAt(sheetIndex);
    1204         for (int j = 0; j < coluids.Length; j++)
    1205         {
    1206             for (int i = 0; i < updateData[j].Length; i++)
    1207             {
    1208                 try
    1209                 {
    1210                     if (sheet1.GetRow(i + rowid) == null)
    1211                     {
    1212                         sheet1.CreateRow(i + rowid);
    1213                     }
    1214                     if (sheet1.GetRow(i + rowid).GetCell(coluids[j]) == null)
    1215                     {
    1216                         sheet1.GetRow(i + rowid).CreateCell(coluids[j]);
    1217                     }
    1218                     sheet1.GetRow(i + rowid).GetCell(coluids[j]).SetCellValue(updateData[j][i]);
    1219                 }
    1220                 catch (Exception ex)
    1221                 {
    1222                     //wl.WriteLogs(ex.ToString());
    1223                 }
    1224             }
    1225         }
    1226         try
    1227         {
    1228             FileStream writefile = new FileStream(outputFile, FileMode.Create);
    1229             hssfworkbook.Write(writefile);
    1230             writefile.Close();
    1231         }
    1232         catch (Exception ex)
    1233         {
    1234             //wl.WriteLogs(ex.ToString());
    1235         }
    1236     }
    1237 
    1238     #endregion
    1239 
    1240     public static int GetSheetNumber(string outputFile)
    1241     {
    1242         int number = 0;
    1243         try
    1244         {
    1245             IWorkbook wk = null;
    1246             FileStream readfile = new FileStream(outputFile, FileMode.Open, FileAccess.Read);
    1247             if (outputFile.EndsWith(".xlsx"))
    1248                 wk = new XSSFWorkbook(readfile);
    1249             else
    1250                 wk = new HSSFWorkbook(readfile);
    1251             number = wk.NumberOfSheets;
    1252         }
    1253         catch (Exception)
    1254         {
    1255             //wl.WriteLogs(exception.ToString());
    1256         }
    1257         return number;
    1258     }
    1259 
    1260     public static ArrayList GetSheetName(string outputFile)
    1261     {
    1262         ArrayList arrayList = new ArrayList();
    1263         try
    1264         {
    1265             IWorkbook wk = null;
    1266             FileStream readfile = new FileStream(outputFile, FileMode.Open, FileAccess.Read);
    1267             if (outputFile.EndsWith(".xlsx"))
    1268                 wk = new XSSFWorkbook(readfile);
    1269             else
    1270                 wk = new HSSFWorkbook(readfile);
    1271 
    1272             for (int i = 0; i < wk.NumberOfSheets; i++)
    1273             {
    1274                 arrayList.Add(wk.GetSheetName(i));
    1275             }
    1276 
    1277             //var newFile2 = @"newbook.core.docx";
    1278             //using (var fs = new FileStream(newFile2, FileMode.Create, FileAccess.Write))
    1279             //{
    1280             //    XWPFDocument doc = new XWPFDocument();
    1281             //    var p0 = doc.CreateParagraph();
    1282             //    p0.Alignment = ParagraphAlignment.CENTER;
    1283             //    XWPFRun r0 = p0.CreateRun();
    1284             //    r0.FontFamily = "microsoft yahei";
    1285             //    r0.FontSize = 18;
    1286             //    r0.IsBold = true;
    1287             //    r0.SetText("This is title");
    1288 
    1289             //    var p1 = doc.CreateParagraph();
    1290             //    p1.Alignment = ParagraphAlignment.LEFT;
    1291             //    p1.IndentationFirstLine = 500;
    1292             //    XWPFRun r1 = p1.CreateRun();
    1293             //    r1.FontFamily = "·ÂËÎ";
    1294             //    r1.FontSize = 12;
    1295             //    r1.IsBold = true;
    1296             //    r1.SetText("This is content, content content content content content content content content content");
    1297 
    1298             //    doc.Write(fs);
    1299             //}
    1300         }
    1301         catch (Exception ex)
    1302         {
    1303             throw ex;
    1304         }
    1305         return arrayList;
    1306     }
    1307 
    1308     public static bool isNumeric(String message, out double result)
    1309     {
    1310         Regex rex = new Regex(@"^[-]?d+[.]?d*$");
    1311         result = -1;
    1312         if (rex.IsMatch(message))
    1313         {
    1314             result = double.Parse(message);
    1315             return true;
    1316         }
    1317         else
    1318             return false;
    1319     }
    1320 
    1321     /// <summary>
    1322     /// 根据其他行的内容合并ISheet中某列相同信息的行(单元格),2列相等
    1323     /// </summary>
    1324     /// <param name="sheet"></param>
    1325     /// <param name="StartRow">合并的开始行</param>
    1326     /// <param name="cols">合并列</param>
    1327     /// <param name="precols">参考列</param>
    1328     public static void GroupCol(ISheet sheet, int StartRow, int cols, int precols)
    1329     {
    1330         if (sheet.PhysicalNumberOfRows < StartRow + 1 || cols > sheet.GetRow(0).PhysicalNumberOfCells - 1)
    1331         {
    1332             return;
    1333         }
    1334         int RowNum = 0;
    1335         ICell oldPreCell = sheet.GetRow(StartRow).GetCell(precols);
    1336         ICell oldCell = sheet.GetRow(StartRow).GetCell(cols);
    1337         int i = StartRow + 1;
    1338         while (i < sheet.PhysicalNumberOfRows)
    1339         {
    1340 
    1341             ICell PreCell = sheet.GetRow(i).GetCell(precols);
    1342             ICell Cell = sheet.GetRow(i).GetCell(cols);
    1343             if (oldCell.ToString() == Cell.ToString() && oldPreCell.ToString() == PreCell.ToString())
    1344             {
    1345                 //Cell.SetCellValue("");
    1346                 RowNum++;
    1347             }
    1348             else
    1349             {
    1350                 if (RowNum > 0)
    1351                 {
    1352                     CellRangeAddress region = new CellRangeAddress(StartRow, StartRow + RowNum, cols, cols);
    1353                     sheet.AddMergedRegion(region);
    1354                     StartRow += RowNum;
    1355                 }
    1356                 oldPreCell = PreCell;
    1357                 oldCell = Cell;
    1358                 StartRow += 1;
    1359                 RowNum = 0;
    1360             }
    1361             i++;
    1362         }
    1363         if (RowNum > 0 && i == sheet.PhysicalNumberOfRows)
    1364         {
    1365             CellRangeAddress region = new CellRangeAddress(StartRow, StartRow + RowNum, cols, cols);
    1366             sheet.AddMergedRegion(region);
    1367             StartRow += RowNum;
    1368         }
    1369     }
    1370 
    1371     /// <summary>
    1372     /// 自动设置Excel列宽,行高
    1373     /// </summary>
    1374     /// <param name="sheet">Excel表</param>
    1375     public static void AutoSizeColumns(ISheet sheet)
    1376     {
    1377         int RowNum = sheet.LastRowNum;
    1378         int ColumnNum = sheet.GetRow(0).LastCellNum;
    1379         int HeightValue = 0;
    1380         for (int i = 0; i < ColumnNum; i++)
    1381         {
    1382             int columnWidth = sheet.GetColumnWidth(i) / 256;//获取当前列宽度  
    1383             for (int j = 1; j <= RowNum; j++)//在这一列上循环行  
    1384             {
    1385                 IRow currentRow = sheet.GetRow(j);
    1386                 ICell currentCell = currentRow.GetCell(i);
    1387                 int length = Encoding.UTF8.GetBytes(currentCell.ToString()).Length;//获取当前单元格的内容宽度  
    1388                 if (columnWidth < length + 1)
    1389                     columnWidth = length + 1;
    1390                 if (columnWidth > 40)
    1391                     columnWidth = 40;
    1392 
    1393                 if (length > HeightValue) HeightValue = length;
    1394                 currentRow.HeightInPoints = 20 * (HeightValue / 60 + 1);//高度自适应
    1395             }
    1396             sheet.SetColumnWidth(i, columnWidth * 256);
    1397         }
    1398     }
    1399 
    1400     public static void AutoSetType(ICell newCell, DataColumn column, DataRow row)
    1401     {
    1402         string drValue = row[column].ToString();
    1403         switch (column.DataType.ToString())
    1404         {
    1405             case "System.String"://字符串类型
    1406                                  //double result;
    1407                                  //if (double.TryParse(drValue, out result) && result.ToString().Length != 15)
    1408                                  //    newCell.SetCellValue(result);
    1409                                  //else
    1410                 newCell.SetCellValue(drValue);
    1411                 break;
    1412             case "System.DateTime"://日期类型   
    1413                 DateTime dateV;
    1414                 DateTime.TryParse(drValue, out dateV);
    1415                 newCell.SetCellValue(dateV);
    1416                 break;
    1417             case "System.Boolean"://布尔型   
    1418                 bool boolV = false;
    1419                 bool.TryParse(drValue, out boolV);
    1420                 newCell.SetCellValue(boolV);
    1421                 break;
    1422             case "System.Int16"://整型   
    1423             case "System.Int32":
    1424             case "System.Int64":
    1425             case "System.Byte":
    1426                 int intV = 0;
    1427                 int.TryParse(drValue, out intV);
    1428                 if (intV != 0)
    1429                     newCell.SetCellValue(intV);
    1430                 break;
    1431             case "System.Decimal"://浮点型   
    1432             case "System.Double":
    1433                 double doubV = 0;
    1434                 double.TryParse(drValue, out doubV);
    1435                 if (doubV != 0)
    1436                     newCell.SetCellValue(doubV);
    1437                 break;
    1438             case "System.DBNull"://空值处理   
    1439                 newCell.SetCellValue("");
    1440                 break;
    1441             default:
    1442                 newCell.SetCellValue("");
    1443                 break;
    1444         }
    1445     }
    1446 
    1447 
    1448 
    1449     /// <summary>
    1450     /// DataTable导出到Excel文件 两行表头
    1451     /// </summary>
    1452     /// <param name="dt_Title">表头表格</param>
    1453     /// <param name="dtSource">源DataTable</param>
    1454     /// <param name="sFileName">文件名</param>
    1455     /// <param name="SaveFile">是否需保存</param>
    1456     /// <param name="SheetName">Sheet名</param>
    1457     /// <param name="ColumnProperty">列属性集,多个属性集以"|"分隔,值以","分隔,范例:"Merge,0,0|Align,2,right|Width,4,100|DataType,5,double"</param>
    1458 
    1459     public static void ExportDTtoExcel_2Title(DataTable dt_Title, DataTable dtSource, string sFileName, bool SaveFile, string SheetName, string ColumnProperty)
    1460     {
    1461         using (MemoryStream ms = ExportDT_2Title(dt_Title, dtSource, SheetName, ColumnProperty))
    1462         {
    1463             if (SaveFile)
    1464             {
    1465                 using (FileStream fs = new FileStream(sFileName, FileMode.Create, FileAccess.Write))
    1466                 {
    1467                     byte[] data = ms.ToArray();
    1468                     fs.Write(data, 0, data.Length);
    1469                     fs.Flush();
    1470                 }
    1471                 System.IO.FileInfo fileInfo = new System.IO.FileInfo(sFileName);
    1472                 sFileName = fileInfo.Name;
    1473             }
    1474             System.Web.HttpContext.Current.Response.AddHeader("Content-Disposition", string.Format("attachment;filename=" + HttpUtility.UrlEncode(sFileName)));
    1475             System.Web.HttpContext.Current.Response.AddHeader("Content-Length", ms.ToArray().Length.ToString());
    1476             System.Web.HttpContext.Current.Response.BinaryWrite(ms.ToArray());
    1477             System.Web.HttpContext.Current.Response.Flush();
    1478             ms.Close();
    1479             ms.Dispose();
    1480             System.Web.HttpContext.Current.Response.End();
    1481         }
    1482     }
    1483     /// <summary>
    1484     /// DataTable导出到Excel的MemoryStream
    1485     /// </summary>
    1486     /// <param name="dtSource">源DataTable</param>
    1487     public static MemoryStream ExportDT_2Title(DataTable dt_Title, DataTable dtSource, string SheetName, string ColumnProperty)
    1488     {
    1489         using (MemoryStream ms = new MemoryStream())
    1490         {
    1491             HSSFWorkbook workbook = ExportWorkbook_2Title(dt_Title, dtSource, SheetName, ColumnProperty);
    1492             workbook.Write(ms);
    1493             ms.Flush();
    1494             ms.Position = 0;
    1495             return ms;
    1496         }
    1497     }
    1498     public static HSSFWorkbook ExportWorkbook_2Title(DataTable dt_Title, DataTable dtSource, string SheetName, string ColumnProperty)
    1499     {
    1500         HSSFWorkbook workbook = new HSSFWorkbook();
    1501         if (SheetName == null || SheetName == "") SheetName = "Sheet1";
    1502         HSSFSheet sheet = workbook.CreateSheet(SheetName) as HSSFSheet;
    1503 
    1504         // 标题样式
    1505         HSSFCellStyle headStyle = workbook.CreateCellStyle() as HSSFCellStyle;
    1506         headStyle.Alignment = HorizontalAlignment.Center;
    1507         headStyle.VerticalAlignment = VerticalAlignment.Center;
    1508         headStyle.BorderBottom = NPOI.SS.UserModel.BorderStyle.Thin;
    1509         headStyle.BorderLeft = NPOI.SS.UserModel.BorderStyle.Thin;
    1510         headStyle.BorderRight = NPOI.SS.UserModel.BorderStyle.Thin;
    1511         headStyle.BorderTop = NPOI.SS.UserModel.BorderStyle.Thin;
    1512         headStyle.WrapText = true;
    1513         HSSFFont font = workbook.CreateFont() as HSSFFont;
    1514         font.Boldweight = (short)FontBoldWeight.Bold;
    1515         headStyle.SetFont(font);
    1516 
    1517         //内容样式
    1518         HSSFCellStyle cellStyle = workbook.CreateCellStyle() as HSSFCellStyle;
    1519         cellStyle.CloneStyleFrom(headStyle);
    1520         cellStyle.Alignment = HorizontalAlignment.Center;
    1521         font = workbook.CreateFont() as HSSFFont;
    1522         font.Boldweight = (short)FontBoldWeight.Normal;
    1523         cellStyle.SetFont(font);
    1524         HSSFCellStyle cellStyleLeft = workbook.CreateCellStyle() as HSSFCellStyle;
    1525         cellStyleLeft.CloneStyleFrom(cellStyle);
    1526         cellStyleLeft.Alignment = HorizontalAlignment.Left;
    1527         HSSFCellStyle cellStyleRight = workbook.CreateCellStyle() as HSSFCellStyle;
    1528         cellStyleRight.CloneStyleFrom(cellStyle);
    1529         cellStyleRight.Alignment = HorizontalAlignment.Right;
    1530 
    1531         int rowIndex = 0;
    1532         #region 列头及样式
    1533 
    1534         for (int i = 0; i < dt_Title.Rows.Count; i++)
    1535         {
    1536             HSSFRow headerRow = sheet.CreateRow(rowIndex) as HSSFRow;
    1537             for (int j = 0; j < dt_Title.Columns.Count; j++)
    1538             {
    1539                 headerRow.CreateCell(dt_Title.Columns[j].Ordinal).SetCellValue(dt_Title.Rows[i][j].ToString());
    1540                 headerRow.GetCell(dt_Title.Columns[j].Ordinal).CellStyle = headStyle;
    1541 
    1542             }
    1543             rowIndex++;
    1544         }
    1545         for (int i = 0; i < dt_Title.Rows.Count; i++)
    1546         {
    1547             for (int m = 0; m < dt_Title.Columns.Count; m++)
    1548             {
    1549                 int n = m + 1;
    1550                 while (n < dt_Title.Columns.Count)
    1551                 {
    1552                     if (dt_Title.Rows[i][m].ToString() == dt_Title.Rows[i][n].ToString())
    1553                     {
    1554                         n++;
    1555                     }
    1556                     else if (n == dt_Title.Columns.Count)
    1557                     {
    1558                         break;
    1559                     }
    1560                     else
    1561                     {
    1562                         //合并同一行相同的列表头
    1563                         sheet.AddMergedRegion(new CellRangeAddress(i, i, m, n - 1));
    1564                         m = n - 1;
    1565                         break;
    1566                     }
    1567                 }
    1568                 if (n == dt_Title.Columns.Count)
    1569                 {
    1570                     sheet.AddMergedRegion(new CellRangeAddress(i, i, m, n - 1));
    1571 
    1572                 }
    1573             }
    1574 
    1575         }
    1576         for (int i = 0; i < dt_Title.Columns.Count; i++)
    1577         {
    1578             for (int m = 0; m < dt_Title.Rows.Count; m++)
    1579             {
    1580                 int n = m + 1;
    1581                 while (n < dt_Title.Rows.Count)
    1582                 {
    1583                     if (dt_Title.Rows[m][i].ToString() == dt_Title.Rows[n][i].ToString())
    1584                     {
    1585                         n++;
    1586                     }
    1587                     else if (n == dt_Title.Rows.Count)
    1588                     {
    1589                         break;
    1590                     }
    1591                     else
    1592                     {
    1593                         //合并同一列相同的行表头
    1594                         sheet.AddMergedRegion(new CellRangeAddress(m, n - 1, i, i));
    1595                         m = n - 1;
    1596                         break;
    1597                     }
    1598                 }
    1599                 if (n == dt_Title.Rows.Count)
    1600                 {
    1601                     sheet.AddMergedRegion(new CellRangeAddress(m, n - 1, i, i));
    1602 
    1603                 }
    1604             }
    1605         }
    1606 
    1607 
    1608 
    1609 
    1610         //sheet.AddMergedRegion(new CellRangeAddress(0, 1, 1, 1));
    1611         //sheet.AddMergedRegion(new CellRangeAddress(0, 1, 2, 2));
    1612         #endregion
    1613 
    1614         foreach (DataRow row in dtSource.Rows)
    1615         {
    1616             #region 填充内容
    1617             HSSFRow dataRow = sheet.CreateRow(rowIndex) as HSSFRow;
    1618             foreach (DataColumn column in dtSource.Columns)
    1619             {
    1620                 HSSFCell newCell = dataRow.CreateCell(column.Ordinal) as HSSFCell;
    1621                 newCell.CellStyle = cellStyle;
    1622                 AutoSetType(newCell, column, row);
    1623             }
    1624 
    1625             #endregion
    1626             rowIndex++;
    1627         }
    1628         AutoSizeColumns(sheet);
    1629 
    1630         if (ColumnProperty != null)
    1631         {
    1632             string[] ColumnArray = ColumnProperty.Split('|');
    1633             foreach (string Column in ColumnArray)
    1634             {
    1635                 string[] ValueArray = Column.Split(',');
    1636                 if (ValueArray.Length > 2)
    1637                 {
    1638                     int cols = int.Parse(ValueArray[1]);
    1639                     switch (ValueArray[0].ToString())
    1640                     {
    1641                         case "Merge":
    1642                             int precols = 0;
    1643                             int.TryParse(ValueArray[2], out precols);
    1644                             GroupCol(sheet, 1, cols, precols);
    1645                             break;
    1646                         case "Width":
    1647                             int columnWidth = 0;
    1648                             int.TryParse(ValueArray[2], out columnWidth);
    1649                             sheet.SetColumnWidth(cols, columnWidth * 256);
    1650                             break;
    1651                         case "Align":
    1652                             string Value = ValueArray[2].ToString();
    1653                             for (int j = 1; j <= sheet.LastRowNum; j++)
    1654                             {
    1655                                 ICell currentCell = sheet.GetRow(j).GetCell(cols);
    1656                                 switch (Value)
    1657                                 {
    1658                                     case "center":
    1659                                         currentCell.CellStyle = cellStyle;
    1660                                         break;
    1661                                     case "left":
    1662                                         currentCell.CellStyle = cellStyleLeft;
    1663                                         break;
    1664                                     case "right":
    1665                                         currentCell.CellStyle = cellStyleRight;
    1666                                         break;
    1667                                 }
    1668                             }
    1669                             break;
    1670                         case "DataType":
    1671                             string Value2 = ValueArray[2].ToString();
    1672                             for (int j = 1; j <= sheet.LastRowNum; j++)
    1673                             {
    1674                                 ICell currentCell = sheet.GetRow(j).GetCell(cols);
    1675                                 string drValue = currentCell.ToString();
    1676                                 switch (Value2)
    1677                                 {
    1678                                     case "double":
    1679                                         double result;
    1680                                         if (double.TryParse(drValue, out result))
    1681                                             currentCell.SetCellValue(result);
    1682                                         break;
    1683                                     case "string":
    1684                                         currentCell.SetCellValue(drValue.ToString());
    1685                                         break;
    1686                                 }
    1687                             }
    1688                             break;
    1689                     }
    1690                 }
    1691             }
    1692         }
    1693         return workbook;
    1694     }
    1695 
    1696 }
  • 相关阅读:
    mysql GRANT ALL PRIVILEGES 限制某个或所有客户端都可以连接至mysql
    MySql开启远程用户登录GRANTALLPRIVILEGESON*.*TO'root'@'%'I MySql开启远程用户登录GRANTALLPRIVILEGESON*.*TO'root'@'%'I
    php中 -> 和 => 和 :: 的用法 以及 self 和 $this 的用法
    mysql case when then else end 的用法
    C/C++ 程序的build过程
    Git 笔记
    English Snippets
    Ubuntu 使用笔记
    在CentOS上安装Sublime Text
    hihoCoder #1379 Emulator
  • 原文地址:https://www.cnblogs.com/lilixiang-go/p/12898794.html
Copyright © 2011-2022 走看看