asp.net mvc4使用NPOI 数据处理之快速导出Excel文档

一、背景

  在之前做的小项目里有一需求是:要求将一活动录入的数据进行统计,并以excel表格形式导出来,并且对表格格式要求并不高。

二、问题分析

  鉴于用户只要求最终将数据库中的数据导出excel,对于格式要求不高,因此只需要在页面上加入一条链接,后台action中读取数据然后通过第三方组件导出,再下载,就能满足这个简单的需求了。首先上bing找了有关数据导出的组件,NPOI是弹出的次数最多的一项,在这里也要说到以前做winform窗体开发用到过水晶报表的方法,其实实现方法比较多,由于以前没接触过NPOI,便打算在项目里使用这个开源的组件。

asp.net mvc4使用NPOI 数据处理之快速导出Excel文档

三、解决思路或过程

  1. 先准备好数据源。用的是mysql数据库,事先在数据中存入一些数据。
  2. 直接切入主题。这里主要在action里做操做。先要引入NPOI组件的dll(NPOI最新下载链接) ,再控制器中添加 using NPOI.HSSF.UserModel;
  3. 贴上控制器中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("");
            }
  4. 首先,先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开始)。
  5. 在表格建好了以后开始导入数据。list装好的数据,因此每行遍历一次,将数据填充进入便可。使用foreach的时候注意,此时第一行已经使用了,被创建了列名,因此需要在一开始的时候,将填充数据的开始行+1即:NPOI.SS.UserModel.IRow rowtemp = sheet1.CreateRow(i + 1); 数据string转换也是正常不过的操作。
  6. 然后关键是导出下载的处理
    // 写入到客户端
                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();
                
    
    
  7. System.IO.MemoryStream和Response是两个很关键的处理,在Response中可以对文件名进行处理,string.Formate();在前台只需要加入<a href = "/admin/ExportDormitoryBottleRecycleExcel"></a>标签。
  8. 实际生成效果
  9. asp.net mvc4使用NPOI 数据处理之快速导出Excel文档

asp.net mvc4使用NPOI 数据处理之快速导出Excel文档

四、总结

  最近也在使用NPOI做更多具体的操作,后期会把一些使用心得和大家一起分享,今天实现的功能简单,如果我思路和方法有误,恳请各位指正,虚心求教。转载请注明来源与出处,谢谢合作 By 点将台无将

上一篇:poi导出word文档,doc和docx


下一篇:针对安卓java入门:条件语句和循环语句