NPOI 简介
作者:Tony Qu
更新
2009.3.24 把 npoi 1.2 alpha 的链接换成 NPOI 1.2 beta
===================================================
本文将通过问答的方式帮助你了解 NPOI。
什么是 NPOI?
NPOI,顾名思义,就是POI 的.NET 版本。那 POI 又是什么呢?POI 是一套用 Java 写成的库,能够帮助开发者在没有安装微软Office 的
情况下读写 Office 97-2003 的文件,支持的文件格式包括 xls, doc, ppt 等。目前 POI 的稳定版本中仅支持 Excel 文件格式 xls,其
他的都属于不稳定版本(放在poi 的 scrachpad 目录中)。NPOI 是构建在 POI 3.x版本之上的,本月发布的NPOI 1.2是对应于 POI 3.2
final 的,所以它支持 Excel 文件读写,但由于人手和精力原因,还没有实现读写 Word, PowerPoint, Visio 的文件格式。
NPOI 的官方网站是啥?
npoi.codeplex.com
为什么用 NPOI?
因为它能够帮助你生成真正的 Office 文件格式,比如说 Excel 文件格式。我曾经看到好几个园友发过有关如何生成 Excel 报表的帖子,
大家确实花了很多心思,具体的帖子如下:
生成 Excel 高级报表(用的是 Office PIA 库)
http://www.cnblogs.com/xiaobier/archive/2008/10/13/1310399.html
Datagrid 数据导出到 excel 文件的三种方法
http://www.cnblogs.com/xieduo/articles/606202.html
其中提到了的 2 种方法分别是:cvs 法、html 法
.net 操作 EXCEL
http://www.cnblogs.com/jhobo/archive/2009/02/17/1392423.html
其中提到了 Office PIA 法、OLEDB 法、OPENXML 法
特别是其中的 cvs 法和 html 法值得提一下,这得感谢 Microsoft Office对于格式的强大兼容性,貌似国产某某 Office 软件就无法正
常显示基于 html 的 xls 文件。
好了,回到我们的问题上,为什么要用 NPOI 呢?
第一点,你不需要在服务器上安装微软的 Office,可以避免版权问题。
第二点,使用起来比 Office PIA 的 API 更加方便,更人性化。
第三点,你不用去花大力气维护 NPOI,NPOI Team 会不断更新、改善 NPOI,绝对省成本。
第四点,很多事情是 html 和 cvs 法做不到的,比如说公式计算[Cell C1]=A1+B1*A2、单元格高级样式(如文本旋转、对齐、宽度)等,
其中公式计算可以适当减轻服务器端的计算压力
第五点,你很难保证你的客户机器上都安装了 Office 2007 或 Office Compatiblity Pack for Office 2003,出于向前兼容的考虑,
还是生成 Office 97-2003 格式比较可靠
当然有人要说了,那我用 myXls 等同类产品可不可以?当然可以,纯属个人喜好,这就好比你愿意用 NHibernate 还是 NBear,完全可
以自由选择。
NPOI 由哪些东西组成?
NPOI 目前主要由以下部分组成
NPOI.POIFS
NPOI.DDF
NPOI.HPSF
NPOI.HSSF
NPOI.SS
NPOI.Util
OLE2 Document File System Library
Microsoft Office Drawing format Library
OLE2 Propertyset library (包括 SummaryInformation 和
DocumentSummaryInformation)
Microsoft Excel BIFF library
Formula Evaluation library
基础类库,提供了很多实用功能,可用于其他读写文件格式项目
的开发
NPOI 目前的版本如何?包括哪些功能?
目前 NPOI 的最新版是 NPOI 1.2 beta,其中包括了以下功能:
a. 读写 OLE2 文档
b. 读写 DocummentSummaryInformation 和 SummaryInformation
c. 基于 LittleEndian 的字节读写
d. 读写 Excel BIFF 格式
e. 识别并读写 Excel BIFF 中的常见 Record,如 RowRecord, StyleRecord, ExtendedFormatRecord
f. 支持设置单元格的高、宽、样式等
g. 支持调用部分 Excel 内建函数,比如说 sum, countif 以及计算符号
h. 支持在生成的 Xls 内嵌入打印设置,比如说横向/纵向打印、缩放、使用的纸张等
i. …… (功能太多,无法一一例举,大家自己研究吧)
下载地址:http://npoi.codeplex.com/Release/ProjectReleases.aspx?ReleaseId=19001
在开发中哪些地方可以使用 NPOI
a. 生成 Excel 报表
b. Excel 中的文本提取(主要用于搜索引擎)
c. 批量生成 Excel 文件
d. 基于 Excel 文件模板生成新的 Excel
e. 研究 Excel BIFF 文件格式及 OLE2 文件格式
NPOI 的最终目标是什么?
a. 能够读写几乎所有的 Office 97-2003 文件格式,至少能够支持 Word, PowerPoint, Excel, Visio的格式,其他的会根据实际需求
而定。
b. 作为教学 Office 文件格式的“活”教材,也可作为研究生阶段研究数据结构的教材。
即使是目前的 1.2 版本也很不完善,支持的 Excel 功能还很有限,没有搞过 NPOI 的研发,包括我在内的很多人很难想象微软这样一个
Excel 软 件的开发量,其中除了我们常用的基本功能以外,还有很多内置函数的实现、对行进行分组、行的锁定、表单的保护等。说
实话有些功能我也是第一次听说,是在开 发中一边看 Excel 界面一边实现的(呵呵,是不是很土)。由于Office 2007为了兼容 Office
97-2003,在其基础上增加了很多新的 Record,所以要生成真正意义上的全新的 Excel BIFF 很难(话说微软的开发速度贼快)。
在 NPOI 以后的版本中还会支持 Pivot 表和图表(Chart),其实你在 poi 的 svn 中已经可以看到最新的 pivot 和 chart 的代码了,只
是还在开发中,没有发布正式版本,估计今年中旬会发一个新的版本。
我也想研究 Office 文件格式,有没有相关的文档和工具可供参考?
首先是文件格式的说明文档,你可以去微软的官方网站下载:http://www.microsoft.com/interop/docs/officebinaryformats.mspx
接着是,我和 Huseyin 共同开发了 POIFS Browser,目前的版本是 1.2 beta,已经能够识别 Excel BIFF了,因为是基于 NPOI 1.2 alpha
的。
你可以去 http://npoi.codeplex.com/Release/ProjectReleases.aspx?ReleaseId=24305 下载。
我可以参加 NPOI 开发组吗?
当然可以,我非常欢迎大家加入 NPOI Team,因为目前狂缺人手,很多事情要做,比如说实现读写 Word 格式的库,即 HWPF;还需要有
人帮忙一起写文档、写范例、写教程。目前团队中只有 2 个人,我和 Huseyin(土耳其人),最近 Huseyin 也很忙,没时间维护 NPOI,
所以我很需要你的加入。大家有兴趣可以到 http://npoi.codeplex.com/Thread/View.aspx?ThreadId=36157 回帖,或者直接发邮件给
我(具体邮件地址见我 blog 的左边栏)。
NPOI Team 下一步准备干嘛?
上一个问题中提到事情真的很多,下面罗列一下:
a. 使 Excel 读写库(HSSF)更加稳定
b. 开发 HSSF 对 Pivot Table 和 Chart 的支持
c. 开发 Word 读写库(HWPF)、PowerPoint 读写库(HSLF)
d. 把 HSSF 的注释补全,把 java 的注释转成.NET 的,便于用 NDoc 生成文档和智能感知
e. 写 NPOI 1.2 的范例(目前只有 10 个左右,目标是>50 个,类似于微软的 SDK,这样方便大家学习和理解)
f. 写 NPOI 1.2 的教程
h. 根据 POI 3.5 开发 NPOI 1.5
NPOI 1.2 教程 - 2.1.1 创建 Workbook 和 Sheet
作者:Tony Qu
NPOI 官方网站:http://npoi.codeplex.com/
创建 Workbook 说白了就是创建一个 Excel 文件,当然在 NPOI 中更准确的表示是在内存中创建一个 Workbook 对象流。
本节作为第 2 章的开篇章节,将做较为详细的讲解,以帮助 NPOI 的学习者更好的理解 NPOI 的组成和使用。
NPOI.HSSF 是专门负责 Excel BIFF 格式的命名空间,供开发者使用的对象主要位于 NPOI.HSSF.UserModel 和 NPOI.HSSF.Util 命名空
间下,下面我们要讲到 的 Workbook 的创建用的就是 NPOI.HSSF.UserModel.HSSFWorkbook 类,这个类负责创建.xls 文档。
在开始创建 Workbook 之前,我们先要在项目中引用一些必要的 NPOI assembly,如下所示:
NPOI.dll
NPOI.POIFS.dll
NPOI.HSSF.dll
NPOI.Util.dll
要创建一个新的 xls 文件其实很简单,只要我们初始化一个新的 HSSFWorkbook 实例就行了,如下所示:
using NPOI.HSSF.UserModel;