什么是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 | 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.1,其中包括了以下功能:
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=19351
在开发中哪些地方可以使用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,已经能够识别Excel BIFF了。
你可以去http://npoi.codeplex.com/Release/ProjectReleases.aspx?ReleaseId=23409下载。
我可以参加NPOI开发组吗?
当然可以,我非常欢迎大家加入NPOI Team,因为目前狂缺人手,很多事情要做,比如说实现读写Word格式的库,即HWPF;还需要有人帮忙一起写文档、写范例、写教程。目前团队中只有2个人,我和Huseyin(土耳其人),最近Huseyin也很忙,没时间维护NPOI,所以我很需要你的加入。大家有兴趣可以到http://npoi.codeplex.com/Thread/View.aspx?ThreadId=36157回帖,或者直接发邮件给我(具体邮件地址见我blog的左边栏)。
NPOI有教程吗?
有,该教程是为NPOI 1.2写的,详细目录请见http://www.cnblogs.com/tonyqus/archive/2009/04/12/1434209.html
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的教程