一、概要

导出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真的很好用哦~~

最新文章

  1. 元首的愤怒 SharePoint Apps
  2. “Transaction rolled back because it has been marked as rollback-only”
  3. 绘制复数图形和双y轴图形
  4. 代码注册广播接收者&amp;利用广播调用服务的方法服务声命周期(混合开启)
  5. Shell之sed用法 转滴
  6. Android开发之TextView的下划线添加
  7. Qt中无处不在的d指针为何方神圣
  8. 007---Hibernate基本映射标签和属性介绍
  9. B/S 架构中,网络模型的分解与协议解析
  10. js面向对象学习笔记(四):对象的混合写法
  11. 导入Mybatis_Spring项目遇到的问题
  12. vim常用命令集
  13. Docker生态会重蹈Hadoop的覆辙吗?
  14. Eclipse常用20个快捷键
  15. Kylin的简介与安装部署
  16. SpringBoot自定义线程池处理异步任务
  17. 使用myeclipse开发java,解决java中继承JFrame类出现The type JFrame is not accessible due to restriction的问题
  18. System Center Configuration Manager 2016 配置安装篇(Part1)
  19. python-4函数式编程
  20. [转】IIS:Do not nest virtual directories

热门文章

  1. hdu4121 poj4001 Xiangqi(模拟)
  2. Codeforces Round #253 (Div. 2)B(暴力枚举)
  3. C8051F340 USB Fn hacking
  4. CH5E02 [IOI1999]花店橱窗[暴力dp]
  5. BZOJ2141:排队
  6. 自己写的工具:把Evernote(印象笔记)的笔记导入到博客(Blog)中
  7. linux下的时间
  8. 通过maven的jar包库找到对应的jar包。
  9. QString 乱谈(1)
  10. java代码从键盘输入执行次数,数,然后排序