标签:
一、背景
在之前做的小项目里有一需求是:要求将一活动录入的数据进行统计,并以excel表格形式导出来,并且对表格格式要求并不高。
二、问题分析
鉴于用户只要求最终将数据库中的数据导出excel,对于格式要求不高,因此只需要在页面上加入一条链接,后台action中读取数据然后通过第三方组件导出,再下载,就能满足这个简单的需求了。首先上bing找了有关数据导出的组件,NPOI是弹出的次数最多的一项,在这里也要说到以前做winform窗体开发用到过水晶报表的方法,其实实现方法比较多,由于以前没接触过NPOI,便打算在项目里使用这个开源的组件。
三、解决思路或过程
public ActionResult ExportDormitoryBottleRecycleExcel() { NPOI.HSSF.UserModel.HSSFWorkbook book = new NPOI.HSSF.UserModel.HSSFWorkbook(); NPOI.SS.UserModel.ISheet sheet1 = book.CreateSheet("Sheet1"); List<Model> list = new List<Model>(); list = pbsAccess.DeriveList(); //创建栏目 NPOI.SS.UserModel.IRow row = sheet1.CreateRow(0); row.CreateCell(0).SetCellValue("编号"); row.CreateCell(1).SetCellValue("Col_1"); row.CreateCell(2).SetCellValue("Col_2"); row.CreateCell(3).SetCellValue("Col_3"); row.CreateCell(4).SetCellValue("Col_4"); row.CreateCell(5).SetCellValue("Col_5"); for (int i = 0; i < list.Count; i++) { NPOI.SS.UserModel.IRow rowtemp = sheet1.CreateRow(i + 1); rowtemp.CreateCell(0).SetCellValue((i + 1).ToString()); rowtemp.CreateCell(1).SetCellValue(list[i].DormitoryNumber.ToString()); rowtemp.CreateCell(2).SetCellValue(list[i].SmallBottleNumber.ToString()); rowtemp.CreateCell(3).SetCellValue(list[i].BigBottleNumber.ToString()); rowtemp.CreateCell(4).SetCellValue(list[i].TotalBottleNumber.ToString()); rowtemp.CreateCell(5).SetCellValue(list[i].PublishTime.ToString()); }
// 写入到客户端
//.......
return Content(""); }
// 写入到客户端 System.IO.MemoryStream ms = new System.IO.MemoryStream(); book.Write(ms); ms.Seek(0, SeekOrigin.Begin); Response.AddHeader("Content-Disposition", string.Format("attachment; filename={0}.xls","****总表"+ DateTime.Now.ToString("yyyyMMddHHmmssfff"))); Response.BinaryWrite(ms.ToArray()); book = null; ms.Close(); ms.Dispose();
System.IO.MemoryStream和Response是两个很关键的处理,在Response中可以对文件名进行处理,string.Formate();在前台只需要加入<a href = "/admin/ExportDormitoryBottleRecycleExcel"></a>标签。
四、总结
最近也在使用NPOI做更多具体的操作,后期会把一些使用心得和大家一起分享,今天实现的功能简单,如果我思路和方法有误,恳请各位指正,虚心求教。转载请注明来源与出处,谢谢合作 By 点将台无将
asp.net mvc4使用NPOI 数据处理之快速导出Excel文档
标签:
原文地址:http://www.cnblogs.com/zhouyuangan/p/aspnet_5.html