本文将通过问答的方式帮助你了解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官方网站: http://npoi.codeplex.com/
一个很不错的教程【博客】:http://www.cnblogs.com/tonyqus/archive/2009/03/16/1409966.html
?
为什么用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 OLE2 Document File System Library NPOI.DDF Microsoft Office Drawing format Library NPOI.HPSF OLE2 Propertyset library (包括SummaryInformation和DocumentSummaryInformation) NPOI.HSSF Microsoft Excel BIFF library NPOI.SS Formula Evaluation library NPOI.Util 基础类库,提供了很多实用功能,可用于其他读写文件格式项目的开发?
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