1、基于 NPOI 导出 Excel 文件的研究与实现摘 要 在基于 B/S 结构进行开发的应用系统中, “文件导出”是一项很重要的功能,利用它可以导出相关的业务数据,以便进行资料保存或者不同业务间的数据交互。本文就如何利用 NPOI 导出一个真正的Excel 文件进行研究与分析。 关键词 NPOI; 导出; Excel 文件 doi : 10 . 3969 / j . issn . 1673 - 0194 . 2013 . 15. 061 中图分类号 TP294 文献标识码 A 文章编号 1673 - 0194(2013)15- 0093- 02 1 导出 Excel 文件的传统方法 在进行 E
2、xcel 文件导出时,传统的方法一般都是利用 Excel 程序自身能够识别网页中的表格内容这种特性来实现的。当 Web 服务程序在响应客户端浏览请求时,先输出 MIME 类型,然后输出表格等 HTML 内容。比如(以 C #代码为例): Response.Clear() ; Response.Buffer = false; Response.AddHeader(“Content-Disposition“,“attachment;filename=test.xls“) ; Response.ContentType =“application/ms-excel“; StringWriter sw=
3、 new StringWriter() ; HtmlTextWriter htw = new HtmlTextWriter(sw) ; GridView1.RenderControl(htw) ; Response.Write(sw.ToString() ) ; Response.End() ; 其中 GridView1 为 Web 服务端的 GridView 控件的 ID。利用此方法的前提是需要重载 VerifyRenderingInServerForm 函数,取消其函数内容。通过这种方法,可以将 Web 页面中的表格内容以 HTML 代码的方式输出到客户端浏览器,并提示保存名为 test.
4、xls 的 Excel 文件。用记事本打开该文件,会发现其内容是 HTML 标记的网页文件,并非真正的二进制Excel 文件。 2 Excel 文件导出的其他几种可行方法 想要导出真正的二进制 Excel 文件,一是可以利用 Excel 应用程序对象创建 Excel 文件,然后输出二进制流到客户端浏览器进行保存;二是可以利用第三方的 Excel 类库,比如 MyXlS、Koogra 和 NPOI 等,直接生成二进制的 Excel 文件,然后输出二进制流到客户端浏览器进行保存。利用 Excel 程序对象创建 Excel 文件首先要添加Microsoft.Office.Interop.Excel
5、引用,并在代码中添加引用 using Microsoft.Office.Interop.Excel ,然后新建一个 ApplicationClass 实例,通过 Excel 应用程序实例进行相关的 Excel 文件操作,将创建的临时 Excel 文件读到内存流中,然后以二进制方式输出,并在最后将此实例释放。 使用 Excel 应用程序对象创建 Excel 文件,需要在服务器端安装Office,而且还需要设定权限允许.NET 访问 COM+,并且在服务器端会看到 Excel 程序窗口一闪而过,当然可以让程序窗口不显示,但是任务管理器里还是会有 Excel 程序的进程,如果多个用户同时请求导出 E
6、xcel文件,会产生多个 Excel 程序的进程,消耗过多的服务器资源,可能导致服务器宕机。另外 Excel 程序会把只包含数字的列进行类型转换,原本是文本型的,Excel 程序会将其转成数值型,比如 000123 会变成123。如果内容以“=”开头,Excel 程序还会把它当成公式执行,然后报错等,不便于原始格式 Excel 的生成。 使用第三方 Excel 类库的优势就是不需要在服务器上安装微软的Office,避免版权问题,而且使用起来比 Office PIA 的 API 更加方便,更人性化,但几种 Excel 类库各有千秋。比如 MyXlS 是一个免费开源的类库,侧重于 Excel 的输
7、出。可以设置到单个单元格,但读取功能很弱。Koogra 与 MyXlS 恰恰相反,是一个非常好用 Excel 读取类库,其最新版可以支持 Excel 2007 格式,可是在测试过程中发现 Koogra 读不了 MyXlS输出的 XLS 文件。而 NPOI 不仅支持导出 Excel,还支持导入 Excel,并能“理解”OLE2 文档结构。对于 Excel 文件来讲,NPOI 不单是能创建Excel 文件,而且能更深入地执行 Excel 文件的各种操作,比如支持单元格的格式设置、合并单元格、对齐设置、使用边框、字体设置、背景和纹理设置、宽度和高度设置等,还能使用 Excel 公式、创建图形、设置打
8、印机属性、锁定列、设置密码等多项操作。 3 利用 NPOI 导出 Excel 文件的实现 基于上述分析,我们使用 NPOI 类库实现 Excel 文件的导出。该类库是 POI 的.NET 版本。POI 是一套用 Java 写成的库,能够帮助开发者在没有安装微软 Office 的情况下读写 Office 97、Office 2003 版本的文件。最新的 NPOI 有.Net 2.0、3.5 和 4.0 三个版本,支持 Excel、Word 的97、2003 和 2007 格式。 利用 NPOI 实现 Excel 文件导出的步骤: 3.1 添加 NPOI 的引用 先在项目工程里引用 NPOI.DL
9、L,然后在代码开始处添加引用: using NPOI.SS.Util; using NPOI.SS.UserModel; using NPOI.HSSF.UserModel; 3.2 创建工作簿 HSSFWorkbook hssfworkbook = new HSSFWorkbook() ; Sheet sheet1= hssfworkbook.CreateSheet(title) ;/创建标题为 title 内容的工作簿 3.3 设置单元格样式 Row row1 = sheet1.CreateRow(0) ;/创建行对象 Cell cell1 = row1.CreateCell(0) ;/根
10、据行对象创建单元格对象 CellStyle style = hssfworkbook.CreateCellStyle() ;/创建样式对象 Font font = hssfworkbook.CreateFont() ;/创建字体对象 style.Alignment = HorizontalAlignment.CENTER;/设置水平居中 style.VerticalAlignment = VerticalAlignment.CENTER;/设置垂直居中 font.FontHeight = 18 * 20;/设置字体 style.SetFont(font) ;/设置样式的字体 cell1.Cel
11、lStyle = style;/设置单元格的样式 3.4 合并相关单元格 CellRangeAddress region = new CellRangeAddress(0, 0, 0, 11) ;/设置合并区域为 0 行 0 列到 0 行 11 列 sheet1.AddMergedRegion(region) ;/为工作簿 sheet1 添加合并区域 3.5 单元格赋值 string title = “2013 年度教学任务分配表“; cell1.SetCellValue(title) ;/为单元格赋值 3.6 导出 Excel 文件 MemoryStream s = new MemorySt
12、ream() ; hssfworkbook.Write(s) ; hssfworkbook.Dispose() ; Response.Clear() ; Response.Buffer = false; Response.ClearContent() ; Response.ClearHeaders() ; Response.AddHeader(“Content-Disposition“,“attachment;filename=“ +Server.UrlEncode(“教学任务分配表.xls“) ) ; Response.BinaryWrite(s.ToArray() ) ; s.Dispose() ; Response.End() ;
Copyright © 2018-2021 Wenke99.com All rights reserved
工信部备案号:浙ICP备20026746号-2
公安局备案号:浙公网安备33038302330469号
本站为C2C交文档易平台,即用户上传的文档直接卖给下载用户,本站只是网络服务中间平台,所有原创文档下载所得归上传人所有,若您发现上传作品侵犯了您的权利,请立刻联系网站客服并提供证据,平台将在3个工作日内予以改正。