- A+
所属分类:NPOI
Controller
- public void MSExcel()
- {
- #region 加载模板文件到工作簿对象中
- //创建工作簿对象
- HSSFWorkbook hssfworkbook;
- //打开模板文件到文件流中
- using (FileStream file = new FileStream(HttpContext.Current.Request.PhysicalApplicationPath + @"Template/导出模板.xls", FileMode.Open, FileAccess.Read))
- {
- //将文件流中模板加载到工作簿对象中
- hssfworkbook = new HSSFWorkbook(file);
- }
- #endregion
- #region 根据模板设置工作表的内容
- //建立一个名为Sheet的工作表
- ISheet sheet = hssfworkbook.GetSheet("新增");
- int T = 0;
- List<MSExcelModel> TableData = new List<MSExcelModel>();
- #region 导出数据
- var Data = (from t1 in db.MSExcel
- select new MSExcelModel
- {
- ID = t1.ID,
- COM_NAME=t1.NAME
- }).ToList();
- TableData.AddRange(Data);
- #endregion
- foreach (var item in TableData)
- {
- if (T <= TableData.Count)
- {
- //将数据添加到表中对应的单元格中,因为行已经创建,不需要重新创建行
- sheet.GetRow(2 + T).GetCell(0).SetCellValue(item.ID);
- sheet.GetRow(2 + T).GetCell(1).SetCellValue(item.NAME);
- }
- T++;
- }
- //强制Excel重新计算表中所有的公式
- sheet.ForceFormulaRecalculation = true;
- #endregion
- #region 设置响应头(文件名和文件格式)
- //设置响应的类型为Excel
- HttpContext.Current.Response.ContentType = "application/vnd.ms-excel";
- //设置下载的Excel文件名
- HttpContext.Current.Response.AddHeader("Content-Disposition", string.Format("attachment; filename={0}", "Excel模板_导出.xls"));
- //Clear方法删除所有缓存中的HTML输出。但此方法只删除Response显示输入信息,不删除Response头信息。以免影响导出数据的完整性。
- HttpContext.Current.Response.Clear();
- #endregion
- #region 写入到客户端
- using (MemoryStream ms = new MemoryStream())
- {
- //将工作簿的内容放到内存流中
- hssfworkbook.Write(ms);
- //将内存流转换成字节数组发送到客户端
- HttpContext.Current.Response.BinaryWrite(ms.GetBuffer());
- HttpContext.Current.Response.End();
- }
- #endregion
- }