一、概要

导出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的更多相关文章

  1. Atitit.excel导出 功能解决方案 php java C#.net版总集合.doc

    Atitit.excel导出 功能解决方案 php java C#.net版总集合.docx 1.1. Excel的保存格式office2003 office2007/2010格式1 1.2. 类库选 ...

  2. NOPI导出Excel

    NOPI导出Excel /// <summary> /// 导出的方法 Excel样式 /// </summary> /// <param name="ds&q ...

  3. C#调用Interrop.excel导出Excel文件失败解决方案

    最近操作员反馈系统在导出Excel时失败,有抛出如下异常:系统错误信息:检索 COM 类工厂中 CLSID 为 {00024500-0000-0000-C000-000000000046} 的组件时失 ...

  4. Atitit.导出excel功能的设计 与解决方案

    Atitit.导出excel功能的设计 与解决方案 1.1. 项目起源于背景1 1.2. Js  jquery方案(推荐)jquery.table2excel1 1.3. 服务器方案2 1.4. 详细 ...

  5. Java web中不同浏览器间导出Excel文件名称乱码问题解决方案

    问题描述: 对于不同浏览器存在对中文编码格式问题,从而在导出Excel文件时,中文文件名出现乱码的情况,即在程序中给要导出的文件指定一个中文名字时,在浏览器上出现的下载框中的文件名出现了乱码,解决如下 ...

  6. POI导出大量数据的简单解决方案(附源码)-Java-POI导出大量数据,导出Excel文件,压缩ZIP(转载自iteye.com)

    说明:我的电脑 2.0CPU 2G内存 能够十秒钟导出 20W 条数据 ,12.8M的excel内容压缩后2.68M 我们知道在POI导出Excel时,数据量大了,很容易导致内存溢出.由于Excel ...

  7. 导出Excel超过65535条限制解决方案

    使用poi导出excel的时候如果数据过多,超过65535条会报错,因为excel2003一个sheet表最多导出65535条,excel2007是10万4000多条限制. 因此遇到这种excel导出 ...

  8. NOPI导入导出EXCEL

    一.简介 1. 什么是NPOI NPOI,顾名思义,就是POI的.NET版本.那POI又是什么呢?POI是一套用Java写成的库,能够帮助开发者在没有安装微软Office的情况下读写Office 97 ...

  9. JAVA POI XSSFWorkbook导出扩展名为xlsx的Excel,附带weblogic 项目导出Excel文件错误的解决方案

    现在很多系统都有导出excel的功能,总结一下自己之前写的,希望能帮到其他人,这里我用的是XSSFWorkbook,我们项目在winsang 用的Tomcat,LInux上用的weblogic服务器, ...

随机推荐

  1. BEC translation exercise 7

    在挑选时我们完全出自疏忽而漏过了这篇短文.In making the selection we passed this short piece by quite inadvertently. we l ...

  2. O(logn)的意思

    T=K*log2(N) 注:2是小2时间T与以2为底的对数成正比.实际上,由于所有的对数都和其他对数成比例(从底数为2转换到底数为10需乘以3.322),我们可以将这个为常数的底数也并入K.由此不必指 ...

  3. 1.mysql优化---优化入门之MySQL的优化介绍及执行步骤

    优化到底优化什么?      优化,一直是面试最常问的一个问题.因为从优化的角度,优化的思路,完全可以看出一个人的技术积累.那么,关于系统优化,假设这么个场景,用户反映系统太卡(其实就是高并发),那么 ...

  4. mysql 在Windows下自动备份

    1.一般备份方法主要为两种: 直接保存数据库data文件夹 mysqldump 用sql命令备份(文件存放目录必须存在) 首先cmd进入MySQL\bin,然后mysqldump --default- ...

  5. 70. Climbing Stairs Add to List

    You are climbing a stair case. It takes n steps to reach to the top. Each time you can either climb ...

  6. 还是畅通工程(peime算法最小生成树)

    个人心得:就是最小生成树的运用,还是要理解好每次都是从已搭建好的生成树里面选择与她的补集中最短距离,所以那个book数组的更新 需要好生体会.不过还是有缺陷,算法的复杂度为O(n^2),看介绍说用优先 ...

  7. mongodb所在目录空间不足解决方法

    1.原理是将目录/home/aa软连接到/usr/lib/下,以后从/usr/lib下读取的内容其实都是放在/home/aa下. 建议不要大范围动/usr下的内容,咋着也是属于系统目录,可能会对已装软 ...

  8. Python内置:items()方法

    文章转载于:https://www.cnblogs.com/wushuaishuai/p/7738118.html(博主:IT技术随笔) #Python3中已取消iteritems()方法 描述 Py ...

  9. Oracle user,role,profile常规操作--用户,权限,角色,配置文件

    Oracle user,role,profile常规操作--用户,权限,角色,配置文件 1 权限查询 1查看所有用户 SQL> select username,account_status,lo ...

  10. Python函数(三)-局部变量

    全局变量 全局变量在函数中能直接访问 # -*- coding:utf-8 -*- __author__ = "MuT6 Sch01aR" name = 'John' def te ...