NPOI 2.0 - Excel讀寫神器再次升級

作者:Tony Qu

導讀:NPOI近況如何?請看這篇文章

很多人都知道NPOI是Excel 97-2003(.xls格式)讀寫神器。如今,經過團隊1年多的努力,NPOI 2.0正式與大家見面,由此NPOI將重新定義它自己——Excel和Word讀寫神器。你沒有看錯,NPOI正式開始支持Word2007以上版本的格式(docx),同時也開始支持Excel 2007以上版本的格式(xlsx)。目前NPOI對docx的支持還處於beta階段,問題還比較多,但在正式版中,我們將儘可能保證其穩定性。


Open Xml SDK和NPOI有何區別

Open Xml SDK是微軟出的Office 2007以上格式讀寫庫,目前最新版爲2.5,照理說,微軟自己出的應該很有優勢纔對,但遺憾的是,要用這玩意有個不成文的假設——即你對Open Xml格式很熟悉,理解很透徹,否則根本沒法用。但不得不承認,其中自帶的productivity tool還是比較好用的,我在開發NPOI中也用這工具,因爲它能夠幫助校驗生成文件的正確性,對於我修NPOI bug很有幫助。NPOI並非基於微軟那套庫的東西,它是完全獨立的,就連System.IO.Packaging也沒有用,這是爲了保證NPOI能夠運行在.net 2.0和Mono環境中,其實NPOI自己實現了一套類似於System.IO.Packaging的東西,叫OpenXml4Net(在POI中叫OpenXml4j)。這東西的作用是負責管理Open Xml格式的內部部件(Part)關係,否則是無法去維護一個Open xml文件的,雖然大家都知道open xml文件本質上是個zip文件,但並不是說你有了zip庫就能維護open xml文件包,這是兩碼事。NPOI同時提供了非常好的上層封裝,對普通需求的用戶Open xml格式是透明的,即你不需要理解什麼是Open Xml;但如果你用Open Xml sdk,你就必須明白有關Open Xml的一切。另外,Open Xml SDK是不支持很多高級操作的,如公式計算,因爲Open Xml SDK認爲這些東西應該由Excel自己來管,屬於UI部分的功能,而非由SDK來管(也不知道這位產品經理懂不懂技術,這麼實用的功能盡然不做到Excel生成庫裏)。

其實,早期NPOI並不打算支持Open Xml文件格式,因爲我當時看到微軟出了Open Xml SDK,心想這塊基本沒市場了,但遺憾的是微軟自己並沒有投入多少上去,封裝的也很一般,等了5年,總算它出Open Xml SDK 2.5了,結果還是很挫。再加上看到EPPlus庫做的很紅火,但由於license的問題,所以決定重新考慮通過擴展NPOI奪回這塊市場。


NPOI 2.0到底提供了哪些功能,能稱得上神器

首先,自然是支持讀寫docx和xlsx,目前只保證支持到Excel 2010和Word 2010,雖然理論上Excel 2013的大部分功能是可用的,但有外國程序員報告生成的文件在Excel 2013會有一些小問題,比如批註的框會變成箭頭,而非長方形,同樣的文件在Excel 2010中打開是好的。

第二,是支持Excel 2007下的創建圖表(如點狀圖)。目前支持的圖表類型還比較少,在2.1中會陸續增加其他圖表類型。

第三,支持運行時公式計算。這是NPOI的老牌功能,但如今這一功能將同時支持Excel 2003和2007。

第四,支持.NET 2.0 sp1運行時(vs2008以上版本支持),微軟官方的Open Xml SDK以及大部分的開源OOXML庫僅支持.NET 3.0以上版本,因爲他們用到了.NET 3.0中的System.IO.Packaging,所以沒法支持.net 2.0。我可以不誇口的說這是全球第一個支持.net 2.0的開源OpenXml讀寫庫。

第五,智能Excel格式檢測,這是通過WorkbookFactory實現的,這個類是個經典的工廠模式,你是需要傳入文件路徑,這個類就知道該幫你創建XSSFWorkbook還是HSSFWorkbook,但傳回來的是IWorkbook接口。

第六,同時提供了四種發佈版本,.net 2.0, .net 4.0, mono .net 2.0, mono .net 4.0,方便用戶在不同的項目中使用。當然啦,這個版本最終會在nuget上提供,目前還爲早了點,因爲正式版還沒出來。


NPOI老用戶上手2.0速度如何

如果你是NPOI老用戶,我可以向你保證,你用NPOI 2.0,基本1天就能上手,因爲NPOI保證Excel 2003和Excel 2007的格式的讀寫接口一致,例如你原來用的是HSSFWorkbook,你現在只需要改成IWorkbook;你原來用的HSSFRow,現在只需要改成IRow,以此類推。基本上,如果你不用Excel 2007增強的功能(2003裏面沒有的),你是不需要直接操作XSSFWorkbook的。其實NPOI在1.2.5開始就引入了接口概念,但當時的意義遠沒有現在這麼大,當時一些用戶質疑爲何要引入接口,因爲無非就是用IWorkbook和HSSFWorkbook,但本質上沒有區別(這也是我們在設計架構時需要經常考慮的一個問題,需不需要用接口?)。

XWPF對於NPOI老用戶上手會比XSSF難許多,因爲NPOI 1.x中沒有Word讀寫組件(doc讀寫組件並不隨正式release發佈,因爲不太穩定。),所以不管是老用戶還是新用戶都是全新的東西。目前NPOI 團隊正在計劃開發一些XWPF的基礎教程,以幫助NPOI用戶儘快上手Word的讀寫操作。當然啦,Word的導入導出需求通常會比Excel少很多很多,所以大部分用戶可能是用不到這個模塊的,如果是這種情況的用戶,可以忽略XWPF這個命名空間。


NPOI還會繼續免費嗎?會不會收費?

雖然我一直在聲明“開源不等於免費”,但NPOI核心組件將一如既往的免費下去,代碼也會一直保持開源,所以大家不用擔心。但今年開始,NPOI會有一系列的盈利嘗試,包括出書、提供增值服務、創建NPOI 國內線下社區、做NPOI全球巡迴演講等。畢竟我也是要養家餬口,所以適當盈利還是有必要的,望大家理解。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章