asp.net mvc4使用NPOI 数据处理之快速导出Excel文档
一、背景
在之前做的小项目里有一需求是:要求将一活动录入的数据进行统计,并以excel表格形式导出来,并且对表格格式要求并不高。
二、问题分析
鉴于用户只要求最终将数据库中的数据导出excel,对于格式要求不高,因此只需要在页面上加入一条链接,后台action中读取数据然后通过第三方组件导出,再下载,就能满足这个简单的需求了。首先上bing找了有关数据导出的组件,NPOI是弹出的次数最多的一项,在这里也要说到以前做winform窗体开发用到过水晶报表的方法,其实实现方法比较多,由于以前没接触过NPOI,便打算在项目里使用这个开源的组件。
三、解决思路或过程
- 先准备好数据源。用的是mysql数据库,事先在数据中存入一些数据。
- 直接切入主题。这里主要在action里做操做。先要引入NPOI组件的dll(NPOI最新下载链接) ,再控制器中添加 using NPOI.HSSF.UserModel;
- 贴上控制器中action里代码:
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(); row.CreateCell().SetCellValue("编号"); row.CreateCell().SetCellValue("Col_1"); row.CreateCell().SetCellValue("Col_2"); row.CreateCell().SetCellValue("Col_3"); row.CreateCell().SetCellValue("Col_4"); row.CreateCell().SetCellValue("Col_5"); ; i < list.Count; i++) { NPOI.SS.UserModel.IRow rowtemp = sheet1.CreateRow(i + ); rowtemp.CreateCell().SetCellValue((i + ).ToString()); rowtemp.CreateCell().SetCellValue(list[i].DormitoryNumber.ToString()); rowtemp.CreateCell().SetCellValue(list[i].SmallBottleNumber.ToString()); rowtemp.CreateCell().SetCellValue(list[i].BigBottleNumber.ToString()); rowtemp.CreateCell().SetCellValue(list[i].TotalBottleNumber.ToString()); rowtemp.CreateCell().SetCellValue(list[i].PublishTime.ToString()); }
// 写入到客户端
//.......return Content(""); }
- 首先,先new一个book对象,再NPOI.SS.UserModel.ISheet sheet1 = book.CreateSheet("Sheet1"); 创建一个名为Sheet1的表对象,这里的Sheet1不是最终输出的文件名。创建好表格后,需要添加列项。这里添加这一段NPOI.SS.UserModel.IRow row = sheet1.CreateRow(0);其中的IRow需要注意了,在看过一些别的博客写的示例时,发现一个错误便是使用NPOI.SS.UserModel.Row,这里引用的是2.1.3.1版本,已经更改过来了,应该是用IRow的,这是看了文档才意识到这里的问题,纠正这个错误。关于NPOI操作的中文文档,有需要的朋友可以留言,我再贴出来,在这得感谢之前在NPOI开发群里各路大神的帮助。row.CreateCell(i).SetCellValue("编号"),有多少列,i取到多少(从0开始)。
- 在表格建好了以后开始导入数据。list装好的数据,因此每行遍历一次,将数据填充进入便可。使用foreach的时候注意,此时第一行已经使用了,被创建了列名,因此需要在一开始的时候,将填充数据的开始行+1即:NPOI.SS.UserModel.IRow rowtemp = sheet1.CreateRow(i + 1); 数据string转换也是正常不过的操作。
- 然后关键是导出下载的处理
// 写入到客户端 System.IO.MemoryStream ms = new System.IO.MemoryStream(); book.Write(ms); ms.Seek(, 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文档的更多相关文章
- 转:ASP.NET MVC 将IList<T>导出Excel文档的泛型类
/// <summary> /// 提供将泛型集合数据导出Excel文档. /// </summary> /// <typeparam name="T" ...
- Asp.net中导出Excel文档(Gridview)
主要思路,通过GridView来导出文档. 新建一个Aspx页面,页面创建GridView控件,后台绑定好数据源.然后load中直接打印即可导出 前台的GridView <asp:GridVie ...
- C# NPOI 导入与导出Excel文档 兼容xlsx, xls
之前写了个小程序,导出一些数据成Excel,程序使用的是Microsoft.Office.Interop.Excel类来操作Excel. 在本机测试的时候都好好的,但是将生成文件放到其他电脑上却怎样也 ...
- [转]C# NPOI 导入与导出Excel文档 兼容xlsx, xls
本文转自:https://www.cnblogs.com/lazyneal/p/6148912.html 参考:http://www.cnblogs.com/restran/p/3889479.htm ...
- C# NPOI 导入与导出Excel文档 兼容xlsx, xls(xf13中已经引用了xlsx的npoi)
这里使用的NPOI版本为: 2.1.3.1 官方下载地址: http://npoi.codeplex.com/releases 版本内包含.Net 2.0 与.Net 4.0 .Net 4.0中包含文 ...
- ASP.NET 导出Excel文档
System.IO.TextWriter writer = new System.IO.StreamWriter(Server.MapPath("/provprice.xls"), ...
- 简单快速导出word文档
最近,我写公司项目word导出功能,应该只有2小时的工作量,却被硬生生的拉长2天,项目上线到业务正常运行也被拉长到2个星期. 为什么如此浪费时间呢? 1)公司的项目比较老,采用硬编码模式,意味着wor ...
- python快速生成注释文档的方法
python快速生成注释文档的方法 今天将告诉大家一个简单平时只要注意的小细节,就可以轻松生成注释文档,也可以检查我们写的类方法引用名称是否重复有问题等.一看别人专业的大牛们写的文档多牛多羡慕,不用担 ...
- 【转】ExcelHelper类,用npoi读取Excel文档
//------------------------------------------------------------------------------------- // All Right ...
随机推荐
- iOS多线程之2.NSThread的加锁@synchronized
我在上一篇文章讲了线程的生命周期,这篇文章来讲讲线程加锁的注意事项与@synchronized关键字. 那什么时候需要加锁呢,就是当多条线程同时操作一个变量时,就需要加锁了.至于为什么要加锁,可以 ...
- Mac系统下Android生成keystore
首先打开终端(在搜索里面搜索Te即可出来) 然后输入 cd /Library/Java/Home/bin/ 然后这步很关键,由于我们用的是当前用户,所以没有最高权限,不能在Library文件夹下生成 ...
- 如何获取ios 设备名字 model
由于需要获取设备名字,在网上找了一些方法,发现能够解决问题,但是需要做一个匹配,然后设备年年都会出新款,而且设备的种类又很多,所以在获取设备信息后我又做了一个操作,--->我在google上找到 ...
- ViewStub源码分析
ViewStub是一种特殊的View,Android官方给出的解释是:一种不可见的(GONE).size是0的占位view,多用于运行时 延迟加载的,也就是说真正需要某个view的时候.在实际项目中, ...
- 1-学习前言&C语言概述
[C语言]01-学习前言&C语言概述 参考自 http://www.cnblogs.com/mjios/archive/2013/03/12/2956508.html#label2 C语言是我 ...
- python-list tuple dict set
1:删除一个列表末尾的元素 pop方法 >>> a [1, 'Jack', 2, 3, 2] >>> a.pop() >>> a [1, 'Jac ...
- Provider:SSL Provider,error:0-等待的操作过时
今天一同事使用SSMS 2012 连接数据库时,遇到了"provider:SSL Provider,error:0-等待的操作过时",搜索了一下,遇到一哥 们也遇到这个问题:SQL ...
- Python写地铁的到站的原理简易版
Python地铁的到站流程及原理(个人理解) 今天坐地铁看着站牌就莫名的想如果用Python写其工作原理 是不是很简单就小试牛刀了下大佬们勿喷纯属小弟个人理解 首先来看看地铁上显示的站牌如下: 就想这 ...
- 创建 Image - 每天5分钟玩转 OpenStack(21)
本节演示如何通过 Web GUI 和 CLI 两种方法创建 Image. OpenStack 为终端用户提供了 Web UI(Horizon)和命令行 CLI 两种交换界面.两种方式我们都要会用. 可 ...
- python 利用 setup.py 手动安装django_chartit
手动安装django_chartit库 1 下载压缩包 2 解压到python安装目录下,文件夹名为django_chartit,并检查文件夹下是否有setup.py文件 3 在cmd中进入djang ...