欢迎访问Neuzilla官方博客:http://www.neuzilla.com/blog


作者:Tony Qu

 

NPOI这个库想必大家都不会陌生,这套库在国内外小有名气,已经成为公认的Excel 2003文件格式读写.NET解决方案之一,大量的公司正在使用这套库完成导入导出工作。如今,我们NPOI团队经过半年的努力,给大家带来了NPOI 2.0第一版(alpha),让我们来看看这个版本给我们带来了哪些惊喜。

第一个惊喜:OOXML文件格式的读写。OOXML是微软在Office 2007之后加入的标准格式规范,其底层采用了zip格式,但并不是说只要你的程序能够读zip,它就能轻易地读写OOXML,从某种程度上讲,这是非常困难的,因为你要去维护大量的内部对象关系,尽管他们都是纯文本形式的xml,但还是会有很多问题,如果你只是简单的抽取某些内容,或许xpath能帮你解决问题,但要全面的掌控ooxml,你不得不考虑用System.Packaging这样的类库。然而,遗憾的是System.Packaging只支持.NET 3.0以上版本,如今NPOI帮你解决了这个问题,NPOI仍然支持基于.NET 2.0的OOXML读写,当然NPOI并没有使用System.Packaging,而是使用了自己实现的OOXML读写库,叫做OpenXML4Net,这套库源于POI的OpenXML4j,为了尊重原作者的命名,所以就把j改成了Net。

第二个惊喜:大家最期盼的Excel 2007/2010读写功能。目前这一块还不算特别稳定,会有一些bug,但大部分功能可用。值得一提的是,这次的NPOI.XSSF与NPOI.HSSF使用了完全相同的接口,即NPOI.SS,NPOI的老用户曾经一度询问NPOI.SS的意义何在,现在你应该明白了吧,正是考虑到excel 2007和excel 2010的支持。现在不是流行面向接口编程和依赖注入吗?NPOI.SS就是很好的实践,有兴趣的可研究下NPOI的源代码。由于接口基本保持一致,基本上老用户不需要额外的学习就能轻易的使用NPOI.XSSF,我们来举个简单的例子,比如创建一个Sheet,然后创建一个Cell,并给这个Cell赋值,比如Hello World。

第三个惊喜:支持超过255列或者65535行。没错!从2.0开始,只要你使用XSSF,你就能超越这两个限制。其实关于这个问题我已经说过多次,255列或65535行并不是NPOI的限制,NPOI只和文件格式打交道,理论上即使是NPOI 2.0以前的版本,也能够把记录写进去,但问题是Excel并不买账,你写进去了,它不见得会去读,所以这没有意义。但Excel 2007在读取xlsx时会处理超过的部分,所以就能帮你导出更多数据,这本身是xlsx格式的一个特性。

第四个惊喜:对Word2007的支持。尽管NPOI对Word2003的支持一直处于“初级阶段”,HWPF一直放在scrathpad目录而非main目录,也从来没有随正式版发不过,这次我们决定在正式版中加入对docx的支持,当然Word方面的支持可能没有Excel来得这么全面,毕竟对于POI来说,Word和Powerpoint并不是它的强项,只能说他们刚起步。

 

说到这,大家是不是有点迫不及待了,如果是的话,可以到这个地址下载:http://npoi.codeplex.com/releases/view/92382

不过目前NPOI还是alpha版本,希望大家本着狗食(dog-food)精神,多使用、多提意见,同时也欢迎大家与我洽谈商业咨询和合作业务,我的邮箱是tonyqus (at) gmail.com。