• .net利用NPOI生成excel文件


    整理代码,这个是生成excel文件,用的是HSSF的方式,只能生成65535行,256列的数据,如果要看office07之后的生成,之前的随笔里提过。这个是一个完整的过程。

    首先是已经查找好的数据,这里就不写怎么查找了,生成的结果是DataSet ds。

    首先是生成一个带需求结果的表格,DataTable dtExcel = GetNewTbl("dtExcelModel");

    GetNewTbl方法的代码如下:

     1 public static DataTable GetNewTbl(string tableName)
     2 {
     3     var dt = new DataTable();
     4     switch (tableName)
     5     {
     6          case "ConfigModel":
     7                 dt.Columns.Add("CorpCode", typeof(String));
     8                 dt.Columns.Add("GroupName", typeof(String));
     9                 dt.Columns.Add("Guid", typeof(String));                  
    10                 break;
    11          case "dtExcelModel":
    12                 dt.Columns.Add("id", typeof(String));
    13                 dt.Columns.Add("状态", typeof(String));                    
    14                 break;
    15     }
    16     return dt;
    17 }

    接着生成要打印的文件

     1 DataTable dtExcel = Dt.GetNewTbl("dtExcelModel");
     2 dtExcel.TableName = "Sheet1";
     3 for (int i = 0; i < ds.Tables[0].Rows.Count; i++)
     4 {
     5     DataRow dr = dtExcel.NewRow();
     6     dr["id"] = ds.Tables[0].Rows[i]["id"].ToString();
     7     dr["状态"] = ds.Tables[0].Rows[i]["Status"].ToString();
     8 }
     9 string fileName = DateTime.Now.ToString("yyyyMMddHHmmss") + ".xls";
    10 RenderToExcel(dtExcel, Context, fileName);
    RenderToExcel的方法
    1 public static void RenderToExcel(DataTable table, HttpContext context, string fileName)
    2 {
    3     using (MemoryStream ms = RenderToExcel(table))
    4     {
    5         RenderToBrowser(ms, context, fileName);
    6     }
    7 }

    调用NPOI的方法,代码如下:

     1 public static MemoryStream RenderToExcel(DataTable table)
     2 {
     3     MemoryStream ms = new MemoryStream();
     4     using (table)
     5     {
     6         IWorkbook workbook = new HSSFWorkbook();
     7         ISheet sheet = workbook.CreateSheet();
     8         IRow headerRow = sheet.CreateRow(0);
     9         foreach (DataColumn column in table.Columns)
    10         {
    11             var headCell = headerRow.CreateCell(column.Ordinal);
    12             headCell.SetCellValue(column.Caption);
    13         }
    14         int rowIndex = 1;
    15         foreach (DataRow row in table.Rows)
    16         {
    17             IRow dataRow = sheet.CreateRow(rowIndex);
    18             foreach (DataColumn column in table.Columns)
    19             {
    20                 var cellell = dataRow.CreateCell(column.Ordinal);
    21                 cellell.SetCellValue(row[column].ToString());
    22             }
    23             rowIndex++;
    24         }
    25         workbook.Write(ms);
    26         ms.Flush();
    27         ms.Position = 0;
    28     }
    29     return ms;
    30 }

    还有写文件流的方法RenderToBrowser:

     1 public static void RenderToBrowser(MemoryStream ms, HttpContext context, string fileName)
     2 {
     3     context.Response.Clear();
     4     context.Response.ContentEncoding = Encoding.GetEncoding("GB2312");
     5     context.Response.ContentType = "application/octet-stream";
     6     context.Response.AddHeader("Content-Disposition", "attachment;fileName=" + fileName);
     7     context.Response.BinaryWrite(ms.ToArray());
     8     context.Response.Flush();
     9     context.Response.End();
    10 }
  • 相关阅读:
    求二维数组的最大子集和
    电梯调度《二》
    电梯调度问题
    BIEE 通过提示器选择展示列(列名接收表示变量)
    BIEE时间序列函数
    Python学习笔记(三)
    Python学习笔记(二)
    Python学习笔记(一)
    BIE前台常用设置
    BIEE 连接BW query query结构 引用
  • 原文地址:https://www.cnblogs.com/Lvkang/p/9358472.html
Copyright © 2020-2023  润新知