导出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服务器, ...
随机推荐
- C++ const 常量和常指针
常量,该指针所指向的值为只读 ; const int * p = &a; 常指针,该指针的值为只读,不可再指向其他地址 const * const p = &a; 常值,常指针 con ...
- PHP数据结构之实现栈
接着前面PHP数据结构来学习,今天写的是实现栈. <?php class stack //定义一个栈的类 { private $size; //栈的空间大小 private $top; // 栈 ...
- CodeForces - 682E: Alyona and Triangles(旋转卡壳求最大三角形)
You are given n points with integer coordinates on the plane. Points are given in a way such that th ...
- QQ帐户的申请与登陆(25 分)
实现QQ新帐户申请和老帐户登陆的简化版功能.最大挑战是:据说现在的QQ号码已经有10位数了. 输入格式: 输入首先给出一个正整数N(≤),随后给出N行指令.每行指令的格式为:“命令符(空格)QQ号码( ...
- expect 切换用户
安装expect yum install expect -y #!/bin/expect -f spawn su - expect "Password:" send "n ...
- 学习动态性能表(14)--v$parameter&v$system_parameter
学习动态性能表 第14篇--V$PARAMETER&V$SYSTEM_PARAMETER 2007.6.11 这两个视图列出的各参数项名称以及参数值.V$PARAMETER显示执行查询的se ...
- dockerfile http_php
FROM centos6.6-php5.5:0.0.1 MAINTAINER syberos:wangmo RUN mv /etc/php.ini /etc/php.ini.bak COPY ./ph ...
- 在Linux上利用core dump和GDB调试segfault
时常会遇到段错误(segfault),调试非常费劲,除了单元测试和基本测试外,有些时候是在在线环境下,没有基本开发和测试工具,这就需要调试的技能.以前介绍过使用strace进行系统调试和追踪<l ...
- 布同:使用ghost备份或者还原的往事
我大学的时候经常折腾电脑,安装了不少莫名其妙的东西.当时对各种小软件特别感兴趣,本着毕业后可以做客户端开发的初衷去做事情.不过很多小软件会恶意安装各种东西,修改注册表,时间一长就会导致C盘很臃肿,必须 ...
- spark 算子分析
别的不说先上官网: action 这些算子中需要注意: 1.reduce 和 reduceByKey 虽说都有reduce,但是一个是action级别,一个是transformation级别,速度上会 ...