导出Excel解决方案之一NOPI
一、概要
导出Excel这个功能相信很多人都做过,但是实现这个功能解决方案有好几种,今天我未大家介绍一种比较新的,其实也不新了- -!它叫NPOI,可以完美操作EXCEl的导入和导出操作,让我们一起看下代码吧(都是园子里大神写的,我借鉴一下,望海涵)
二、导入DLL
实现NOPI需要使用第三方DLL,官方下载地址是:http://npoi.codeplex.com/
三、关于大数据量的导入问题
大家都知道Excel2003每个sheet最大的行数是65536,所以大于65535的数据需要写入另一个sheet里,这里是需要注意的。
四、代码
public void ProcessRequest(HttpContext context)
{
context.Response.ContentType = "application/x-excel";
string filename = HttpUtility.UrlEncode("人员档案.xls");//文件名进行url编码,防止乱码
context.Response.AddHeader("Content-Disposition", "attachment;filename=" + filename); var list = bArchive.GetAllArchivesBase(); HSSFWorkbook workBook = new HSSFWorkbook();
ISheet sheet1 = workBook.CreateSheet("表单一");
//sheet列表,防止记录条数大于65535
List<NPOI.SS.UserModel.ISheet> sheetList = new List<NPOI.SS.UserModel.ISheet>();
sheetList.Add(sheet1);
//给sheet1添加数据
SheetFirst(sheet1, workBook, list);
//给其他sheet添加数据 从1开始:去掉第一个sheet +1是因为有一个表头
int rows = list.Count + ;
int p = rows % == ? rows / : (rows / ) + ;
for (int i = ; i < p; i++)
{
ISheet sheet = workBook.CreateSheet("sheet" + (i + ).ToString());
//为sheet添加数据
SheetElse(sheet, (i - ) * + , list);
}
// 写入到客户端
System.IO.MemoryStream ms = new System.IO.MemoryStream();
workBook.Write(ms);
context.Response.AddHeader("Content-Disposition", string.Format("attachment; filename={0}.xls", DateTime.Now.ToString("yyyyMMddHHmmssfff")));
context.Response.BinaryWrite(ms.ToArray());
workBook = null;
ms.Close();
ms.Dispose();
} //第一个Sheet,Excel最大行数是65536行
protected void SheetFirst(NPOI.SS.UserModel.ISheet sheet1, NPOI.HSSF.UserModel.HSSFWorkbook book, List<ArchivesBase> datalist)
{
//标题
NPOI.SS.UserModel.ICell cellTitle = sheet1.CreateRow().CreateCell();
//cellTitle.SetCellValue("水位月报表--" + drpCategory.SelectedItem.Text);
cellTitle.SetCellValue("人事档案表");
//设置标题行样式
NPOI.SS.UserModel.ICellStyle style = book.CreateCellStyle();
style.Alignment = NPOI.SS.UserModel.HorizontalAlignment.CENTER;
NPOI.SS.UserModel.IFont font = book.CreateFont();
font.FontHeight = * ;
style.SetFont(font);
cellTitle.CellStyle = style;
//合并标题行
sheet1.AddMergedRegion(new NPOI.SS.Util.CellRangeAddress(, , , )); //给sheet1添加第一行的头部标题
NPOI.SS.UserModel.IRow row1 = sheet1.CreateRow();
row1.CreateCell().SetCellValue("档案号");
row1.CreateCell().SetCellValue("姓名");
row1.CreateCell().SetCellValue("性别");
row1.CreateCell().SetCellValue("档案类型");
row1.CreateCell().SetCellValue("毕业时间");
row1.CreateCell().SetCellValue("毕业学校");
row1.CreateCell().SetCellValue("身份证");
//将数据逐步写入sheet1各个行
for (int i = ; i < ; i++)
{
NPOI.SS.UserModel.IRow rowtemp = sheet1.CreateRow(i + );
rowtemp.CreateCell().SetCellValue(datalist[i].ArchivesNO == null ? "" : datalist[i].ArchivesNO.ToString());
rowtemp.CreateCell().SetCellValue(datalist[i].PeopleName == null ? "" : datalist[i].PeopleName.ToString());
rowtemp.CreateCell().SetCellValue(datalist[i].PeopleSex == null ? "" : datalist[i].PeopleSex.ToString());
rowtemp.CreateCell().SetCellValue(datalist[i].ArchivesClass == null ? "" : datalist[i].ArchivesClass.ToString());
rowtemp.CreateCell().SetCellValue(datalist[i].GraduateTime == null ? "" : datalist[i].GraduateTime.ToString());
rowtemp.CreateCell().SetCellValue(datalist[i].ArchivesSchool == null ? "" : datalist[i].ArchivesSchool.ToString());
rowtemp.CreateCell().SetCellValue(datalist[i].PeopleCardNO == null ? "" : datalist[i].PeopleCardNO.ToString());
}
} //其他sheet
protected void SheetElse(NPOI.SS.UserModel.ISheet sheet, int j, List<ArchivesBase> datalist)
{
//将数据逐步写入sheet1各个行
for (int i = ; j + i < datalist.Count; i++)//
{
NPOI.SS.UserModel.IRow rowtemp = sheet.CreateRow(i);
rowtemp.CreateCell().SetCellValue(datalist[j + i].ArchivesNO == null ? "" : datalist[j + i].ArchivesNO.ToString());
rowtemp.CreateCell().SetCellValue(datalist[j + i].PeopleName == null ? "" : datalist[j + i].PeopleName.ToString());
rowtemp.CreateCell().SetCellValue(datalist[j + i].PeopleSex == null ? "" : datalist[j + i].PeopleSex.ToString());
rowtemp.CreateCell().SetCellValue(datalist[j + i].ArchivesClass == null ? "" : datalist[j + i].ArchivesClass.ToString());
rowtemp.CreateCell().SetCellValue(datalist[j + i].GraduateTime == null ? "" : datalist[j + i].GraduateTime.ToString());
rowtemp.CreateCell().SetCellValue(datalist[j + i].ArchivesSchool == null ? "" : datalist[j + i].ArchivesSchool.ToString());
rowtemp.CreateCell().SetCellValue(datalist[j + i].PeopleCardNO == null ? "" : datalist[j + i].PeopleCardNO.ToString());
}
}
以上代码园子里有很多,o(∩_∩)o 我写下来防止以后忘记,也顺便学习下,话说这个NPOI真的很好用哦~~
导出Excel解决方案之一NOPI的更多相关文章
- Atitit.excel导出 功能解决方案 php java C#.net版总集合.doc
Atitit.excel导出 功能解决方案 php java C#.net版总集合.docx 1.1. Excel的保存格式office2003 office2007/2010格式1 1.2. 类库选 ...
- NOPI导出Excel
NOPI导出Excel /// <summary> /// 导出的方法 Excel样式 /// </summary> /// <param name="ds&q ...
- C#调用Interrop.excel导出Excel文件失败解决方案
最近操作员反馈系统在导出Excel时失败,有抛出如下异常:系统错误信息:检索 COM 类工厂中 CLSID 为 {00024500-0000-0000-C000-000000000046} 的组件时失 ...
- Atitit.导出excel功能的设计 与解决方案
Atitit.导出excel功能的设计 与解决方案 1.1. 项目起源于背景1 1.2. Js jquery方案(推荐)jquery.table2excel1 1.3. 服务器方案2 1.4. 详细 ...
- Java web中不同浏览器间导出Excel文件名称乱码问题解决方案
问题描述: 对于不同浏览器存在对中文编码格式问题,从而在导出Excel文件时,中文文件名出现乱码的情况,即在程序中给要导出的文件指定一个中文名字时,在浏览器上出现的下载框中的文件名出现了乱码,解决如下 ...
- POI导出大量数据的简单解决方案(附源码)-Java-POI导出大量数据,导出Excel文件,压缩ZIP(转载自iteye.com)
说明:我的电脑 2.0CPU 2G内存 能够十秒钟导出 20W 条数据 ,12.8M的excel内容压缩后2.68M 我们知道在POI导出Excel时,数据量大了,很容易导致内存溢出.由于Excel ...
- 导出Excel超过65535条限制解决方案
使用poi导出excel的时候如果数据过多,超过65535条会报错,因为excel2003一个sheet表最多导出65535条,excel2007是10万4000多条限制. 因此遇到这种excel导出 ...
- NOPI导入导出EXCEL
一.简介 1. 什么是NPOI NPOI,顾名思义,就是POI的.NET版本.那POI又是什么呢?POI是一套用Java写成的库,能够帮助开发者在没有安装微软Office的情况下读写Office 97 ...
- JAVA POI XSSFWorkbook导出扩展名为xlsx的Excel,附带weblogic 项目导出Excel文件错误的解决方案
现在很多系统都有导出excel的功能,总结一下自己之前写的,希望能帮到其他人,这里我用的是XSSFWorkbook,我们项目在winsang 用的Tomcat,LInux上用的weblogic服务器, ...
随机推荐
- 理解 JavaScript 对象原型、原型链如何工作、如何向 prototype 属性添加新的方法。
JavaScript 常被描述为一种基于原型的语言 (prototype-based language)——每个对象拥有一个原型对象,对象以其原型为模板.从原型继承方法和属性.原型对象也可能拥有原型, ...
- java web工程启动socket服务
1.新建web工程 2.自定义类 实现ServletContextListener 接口 在contextInitialized方法中启动socket服务的线程 在contextDestroyed方法 ...
- UVA - 10817 Headmaster's Headache (状压类背包dp+三进制编码)
题目链接 题目大意:有S门课程,N名在职教师和M名求职者,每名在职教师或求职者都有自己能教的课程集合以及工资,要求花费尽量少的钱选择一些人,使得每门课程都有至少两人教.在职教师必须选. 可以把“每个课 ...
- 从零开始的acm竞赛生涯
经过了一段时间的训练,自己的成绩还是很不理想.回首过往,感觉自己还是练得太少,一直没有进入状态,缺乏硬怼出题的能力,思维也不够快,赛场上各种被卡题.可以说,我之前的训练有些仓促,还没有达到入门的水准, ...
- 2017-2018-1 20179215 第十一周 ShellShock攻击实验
<Linux内核原理与设计>第十一周作业 ShellShock攻击实验 分组:和20179205王雅哲共同完成实验及博客攥写 实验内容: Bash中发现了一个严重漏洞shellshock ...
- Git学习原版手稿
手稿诞生记 Git学习的时候难免会有遗忘然后往复学习查看的过程,所以就形成了这个学习的手稿,记录了Git使用过程中的大部分命令,今天在清理的时候偶然看到了这些记录,而且最近也在写Git的 ...
- Til the Cows Come Home (最短路模板题)
个人心得:模板题,不过还是找到了很多问题,真的是头痛,为什么用dijkstra算法book[1]=1就错了..... 纠结中.... Bessie is out in the field and wa ...
- css3 flex布局/grid布局
1.CSS3 Flexbox 布局完全指南(图解 Flexbox 布局详细教程) 2.CSS Grid 布局完全指南(图解 Grid 详细教程)
- QString 乱谈(1)
一个月前尝试写了一篇关于QStringLiteral,存盘时MoinMoin罢工了.吸取一点经验,还是写成短篇吧 可是,可是,QString不就是简简单单一个字符串么?能有什么可谈的.真的么... ( ...
- linux下mysql配置文件my.cnf最详细解释
MySQL配置文件在Windows下叫my.ini,在MySQL的安装根目录下:在Linux下叫my.cnf,该文件位于/etc/my.cnf. 可以查找下:find / -name my.cnf m ...