作者:Tony Qu
NPOI,顾名思义,就是POI的.NET版本。那POI又是什么呢?POI是一套用Java写成的库,能够帮助开发者在没有安装微软Office的情况下读写Office 97-2003的文件,支持的文件格式包括xls, doc, ppt等。在本文发布时,POI的最新版本是3.8 beta 5。
NPOI 1.x是基于POI 3.x版本开发的,NPOI目前最新发布的版本是1.2.4(对应于POI 3.8.4),在该版本中仅支持读写Excel文件格式(xls),在最新的NPOI.ScratchPad中有Word文件格式(doc)的实现,但由于目前不稳定,不与NPOI 1.2.4发布版本一起发布。
如果你有任何关于NPOI的问题,可以加QQ群189925337 。
官方网站
Codeplex分站:http://npoi.codeplex.com
Googlecode分站:http://code.google.com/p/npoi/
官方博客:http://tonyqus.sinaapp.com
官方教程:http://tonyqus.sinaapp.com/archives/38
团队介绍
Tony Qu
来自于中国上海,是这个项目的发起人和开发人员,2008年9月开始了NPOI的开发,负责NPOI所有底层库的开发、测试和bug修复。
个人博客地址为http://tonyqus.cnblogs.com/
Hüseyin Tüfekçilerli
来自于土耳其的伊斯坦布尔,也是这个项目的开发人员,2008年11月参与了NPOI的开发,主要负责POIFS Browser 1.0的开发工作。
个人博客地址为http://huseyint.com/
aTao.Xiang
来自中国,2009年8月开始参与该项目,主要参与了NPOI 1.2中文版教程的撰写工作和推广工作
个人博客地址为http://www.cnblogs.com/atao/
Antony
来自中国广州,2011年下旬加入NPOI团队,目前承担了NPOI 1.3的主要开发工作,已完成Excel2Html和Word2Html的代码转换工作。
Jeff Stedfast
来自美国MA州,2011年底加入NPOI团队,主要负责改进NPOI的命名,并消除一些不必须要的警告信息,他还负责测试Mono下的NPOI行为。
个人博客地址为http://jeffreystedfast.blogspot.com/
Christian Leutloff
来自德国,2011年底加入NPOI团队,主要负责FxCop报的错误,对NPOI进行代码优化。
许可证说明
NPOI采用的是Apache 2.0许可证(poi也是采用这个许可证),这意味着它可以被用于任何商业或非商业项目,你不用担心因为使用它而必须开放你自己的源代码,所以它对于很多从事业务系统开发的公司来说绝对是很不错的选择。
当然作为一个开源许可证,肯定也是有一些义务的,例如如果你在系统中使用NPOI,你必须保留NPOI中的所有声明信息。对于源代码的任何修改,必须做出明确的标识。
完整的apache 2.0许可证请见http://www.phpx.com/man/Apache-2/license.html
回顾与展望
2008-2011 已经完成的任务
a. 提供xls的读写功能
b. 支持Excel公式
c. NPOI 1.2中文教程
d. NPOI.Examples
e. 1300个单元测试 (基于微软VS测试框架)
f. Excel转Html工具库,Word转Html工具库
g. POIFS Browser 1.2版本
2012年计划任务
a. 提供word读取功能,命名空间NPOI.HWPF (暂不支持写)
b. 提供OOXML读写功能(类似System.Packaging的功能)
c. 提供OOXML-Excel读写功能(也许还会有OOXML-Word和OOXML-PowerPoint)
d. NPOI官方网站建设
e. 出一本纸质书,名字未定
f. NPOI 1.2.4电子教程
为什么用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格式比较可靠。
在开发中哪些地方可以使用NPOI
a. 生成Excel报表
b. Excel中的文本提取(主要用于数据挖掘系统)
c. 批量生成Excel文件
d. 基于Excel文件模板生成新的Excel
e. 研究Excel BIFF文件格式及OLE2文件格式
f. Excel转Html, Word转Html