NPOI 通过Excel模板导出数据

  • A+
所属分类:NPOI

NPOI 通过Excel模板导出数据

Controller

  1. public void MSExcel()  
  2. {  
  3.     #region 加载模板文件到工作簿对象中  
  4.     //创建工作簿对象  
  5.     HSSFWorkbook hssfworkbook;  
  6.     //打开模板文件到文件流中  
  7.     using (FileStream file = new FileStream(HttpContext.Current.Request.PhysicalApplicationPath + @"Template/导出模板.xls", FileMode.Open, FileAccess.Read))  
  8.     {  
  9.         //将文件流中模板加载到工作簿对象中  
  10.         hssfworkbook = new HSSFWorkbook(file);  
  11.     }  
  12.     #endregion  
  13.  
  14.     #region 根据模板设置工作表的内容  
  15.     //建立一个名为Sheet的工作表  
  16.     ISheet sheet = hssfworkbook.GetSheet("新增");  
  17.     int T = 0;  
  18.     List<MSExcelModel> TableData = new List<MSExcelModel>();  
  19.     #region 导出数据  
  20.        var Data = (from t1 in db.MSExcel  
  21.                    select new MSExcelModel  
  22.                        {  
  23.                            ID = t1.ID,  
  24.                            COM_NAME=t1.NAME  
  25.                        }).ToList();  
  26.        TableData.AddRange(Data);  
  27.     #endregion  
  28.     foreach (var item in TableData)  
  29.     {  
  30.         if (T <= TableData.Count)  
  31.         {  
  32.             //将数据添加到表中对应的单元格中,因为行已经创建,不需要重新创建行  
  33.             sheet.GetRow(2 + T).GetCell(0).SetCellValue(item.ID);  
  34.             sheet.GetRow(2 + T).GetCell(1).SetCellValue(item.NAME);  
  35.         }  
  36.         T++;  
  37.     }  
  38.     //强制Excel重新计算表中所有的公式  
  39.     sheet.ForceFormulaRecalculation = true;  
  40.     #endregion  
  41.  
  42.     #region 设置响应头(文件名和文件格式)  
  43.   
  44.     //设置响应的类型为Excel  
  45.     HttpContext.Current.Response.ContentType = "application/vnd.ms-excel";  
  46.     //设置下载的Excel文件名  
  47.     HttpContext.Current.Response.AddHeader("Content-Disposition"string.Format("attachment; filename={0}""Excel模板_导出.xls"));  
  48.     //Clear方法删除所有缓存中的HTML输出。但此方法只删除Response显示输入信息,不删除Response头信息。以免影响导出数据的完整性。  
  49.     HttpContext.Current.Response.Clear();  
  50.     #endregion  
  51.  
  52.     #region 写入到客户端  
  53.   
  54.     using (MemoryStream ms = new MemoryStream())  
  55.     {  
  56.         //将工作簿的内容放到内存流中  
  57.         hssfworkbook.Write(ms);  
  58.         //将内存流转换成字节数组发送到客户端  
  59.         HttpContext.Current.Response.BinaryWrite(ms.GetBuffer());  
  60.         HttpContext.Current.Response.End();  
  61.     }  
  62.  
  63.     #endregion  
  64. }  
钰玺

发表评论

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: