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 ...
随机推荐
- AndroidTV版(乐视超3 X55)root,将自己的软件设置为开机自启、系统软件,卸载系统应用等问题总结
最近开发android软件客户要安装在乐视TV上,而且要求是开机自启.我很天真的以为写一个广播接收类接收开机广播就可以了,可是根本不会,有的设备就是不可以接收到开机广播,于是各种百度搜索.大神们说是只 ...
- iOS开发-UI 从入门到精通(四)
一.UITextField 1.UITextField是什么? (1)UITextField(输入框):是控制文本输入和显示的控件.在App中UITextField出现频率也比较高: (2)iOS系统 ...
- Linux0.11内核--加载可执行二进制文件之1.copy_strings
从现在开始就是分析最后的核心模块exec.c了,分析完这个文件后,就会和之前的所有分析形成一个环路,从创建进程.加载进程程序到进程调度.内存管理. exec.c的核心do_execve函数很长,而且用 ...
- Golang(笔记) 顺序编程
package main import ( "fmt" "bufio" "io" "os" "strconv& ...
- React Native知识2-Text组件
Text用于显示文本的React组件,并且它也支持嵌套.样式,以及触摸处理.在下面的例子里,嵌套的标题和正文文字会继承来自styles.baseText的fontFamily字体样式,不过标题上还附加 ...
- android:使用RemoteView自定义Notification
//网上相关内容较少,遂记录下来,备忘. //依然以音乐播放器demo为例. 效果截图 //锤子手机上的效果 step1 准备自定义layout 常规的实现方式,并不会因为是用于notificatio ...
- RMAN命令LIST操作总结
在使用RMAN备份.还原的过程中,我们经常需要查看备份的一些详细信息,例如,RMAN提供了LIST命令.关于LIST命令的详细信息 可以参考Oracle Database Backup and Rec ...
- javascript-装饰者模式
装饰者模式笔记 在不改变原对象的基础上, 通过对其进行包装拓展(添加属性或方法)使原有对象可以满足用户的更复杂要求. 需求不是一成不变的,需求会不断改进,以增强用户体验 demo实例:对输入框添加fo ...
- SortedMap基本特性
特性: 继承与Map. 提供对key(自然排序顺序或者SortedMap创建时提供的Comparator)的全排序. key必须实现Comparable接口,以便于进行相互比较. 应用于对map的遍历 ...
- VS 中關於附加到進程中調試 的問題。
在使用Vs 2012 時,項目發佈到Local IIS 中,如果在調試某個頁面中時,都要F5--> Login --> Debug 很繁瑣,下列有一種較快捷的方式,能夠更快的調試代碼. 1 ...