概述
NPOI,是POI的.NET版本。而POI是一套用Java寫成的庫,能夠幫助開發者在沒有安裝微軟Office的情況下讀寫Office 97-2003的檔案,支持的檔案格式包括xls, doc, ppt等。NPOI是構建在POI 3.x版本之上的,它可以在沒有安裝Office的情況下對Word/Excel文檔進行讀寫操作。
優勢
(一)傳統操作Excel遇到的問題:
1、如果是.NET,需要在伺服器端裝Office,且及時更新它,以防漏洞,還需要設定許可權允許.NET訪問COM+,如果在導出過程中出問題可能導致伺服器宕機。
2、Excel會把只包含數字的列進行類型轉換,本來是文本型的,Excel會將其轉成數值型的,比如編號000123會變成123。
3、導出時,如果欄位內容以“-”或“=”開頭,Excel會把它當成公式進行,會報錯。
4、Excel會根據Excel檔案前8行分析數據類型,如果正好你前8行某一列只是數字,那它會認為該列為數值型,自動將該列轉變成類似1.42702E+17格式,日期列變成包含日期和數字的。
(二)使用NPOI的優勢
1、你不需要在伺服器上安裝微軟的Office,可以避免著作權問題。
2、使用起來比Office PIA的API更加方便,更人性化。
3、你不用去花大力氣維護NPOI,NPOI Team會不斷更新、改善NPOI,絕對省成本。
NPOI之所以強大,並不是因為它支持導出Excel,而是因為它支持導入Excel,並能“理解”OLE2文檔結構,這也是其他一些Excel讀寫庫比較弱的方面。通常,讀入並理解結構遠比導出來得複雜,因為導入你必須假設一切情況都是可能的,而生成你只要保證滿足你自己需求就可以了,如果把導入需求和生成需求比做兩個集合,那么生成需求通常都是導入需求的子集,這一規律不僅體現在Excel讀寫庫中,也體現在pdf讀寫庫中,目前市面上大部分的pdf庫僅支持生成,不支持導入。
構成
NPOI目前主要由POIFS、ddf、HPSF、HSSF、SS、Util六部分組成。
NPOI.POIFS | OLE2 Document File System Library |
NPOI.DDF | Microsoft Office Drawing format Library |
NPOI.HPSF | OLE2 Propertyset library |
NPOI.HSSF | Microsoft Excel BIFF library |
NPOI.SS | Formula Evaluation library |
NPOI.Util | 基礎類庫,提供了很多實用功能,可用於其他讀寫檔案格式項目的開發 |
表1 NPOI組成部分
目前NPOI的最新版是NPOI 1.2.2,其中包括了以下功能:
1、讀寫OLE2文檔
2、讀寫DocummentSummaryInformation和SummaryInformation
3、基於LittleEndian的位元組讀寫
4、讀寫Excel BIFF格式
5、識別並讀寫Excel BIFF中的常見Record,如RowRecord, StyleRecord, ExtendedFormatRecord
6、支持設定單元格的高、寬、樣式等
7、支持調用部分Excel內建函式,比如說sum, countif以及計算符號
8、支持在生成的XLS內嵌入列印設定,比如說橫向/縱向列印、縮放、使用的紙張等。
總結
NPOI作為國人開發的開源項目,文檔完善,更新及時,為.NET開發者提供了便利,主要用於生成Excel報表,搜尋引擎模組中Excel中的文本提取,批量生成Excel檔案,基於Excel檔案模板生成新的Excel等多方面。