导出Excel解决方案之一NOPI
2024-10-21 09:08:40
一、概要
导出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真的很好用哦~~
最新文章
- 元首的愤怒 SharePoint Apps
- “Transaction rolled back because it has been marked as rollback-only”
- 绘制复数图形和双y轴图形
- 代码注册广播接收者&;利用广播调用服务的方法服务声命周期(混合开启)
- Shell之sed用法 转滴
- Android开发之TextView的下划线添加
- Qt中无处不在的d指针为何方神圣
- 007---Hibernate基本映射标签和属性介绍
- B/S 架构中,网络模型的分解与协议解析
- js面向对象学习笔记(四):对象的混合写法
- 导入Mybatis_Spring项目遇到的问题
- vim常用命令集
- Docker生态会重蹈Hadoop的覆辙吗?
- Eclipse常用20个快捷键
- Kylin的简介与安装部署
- SpringBoot自定义线程池处理异步任务
- 使用myeclipse开发java,解决java中继承JFrame类出现The type JFrame is not accessible due to restriction的问题
- System Center Configuration Manager 2016 配置安装篇(Part1)
- python-4函数式编程
- [转】IIS:Do not nest virtual directories
热门文章
- hdu4121 poj4001 Xiangqi(模拟)
- Codeforces Round #253 (Div. 2)B(暴力枚举)
- C8051F340 USB Fn hacking
- CH5E02 [IOI1999]花店橱窗[暴力dp]
- BZOJ2141:排队
- 自己写的工具:把Evernote(印象笔记)的笔记导入到博客(Blog)中
- linux下的时间
- 通过maven的jar包库找到对应的jar包。
- QString 乱谈(1)
- java代码从键盘输入执行次数,数,然后排序