作者:Tony Qu
========================================
[更新] NPOI 1.2.4 新教程地址:http://tonyqus.sinaapp.com
========================================
NPOI 微博: http://weibo.com/npoi
NPOI QQ交流群:
群1:189925337
群2:124527967
群3: 116053476
更新
2009.3.24 把npoi 1.2 alpha的鏈接換成NPOI 1.2 beta
2009.11.18 把npoi 1.2 beta的鏈接換成NPOI 1.2.1; 增加NPOI教程鏈接
2009.12.1 增加QQ群
===================================================
本文將通過問答的方式幫助你了解NPOI。
什么是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?
因為它能夠幫助你生成真正的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的教程
作者:Tony Qu & aTao.Xiang
========================================
[更新] NPOI 1.2.4 新教程地址:http://tonyqus.sinaapp.com/
========================================
NPOI官方網站:http://npoi.codeplex.com/
QQ交流群: 124527967, 116053476, 189925337
聲明:本教程未經許可不得用於任何商業目的
目錄更新日期:2010年1月5日
很多人可能對NPOI還很陌生,別擔心,通過本教程你將對NPOI有進一步的認識和理解。
在此,特別感謝aTao.xiang 2個多月的無私奉獻,正是因為他,我們才能看到這份教材的完整版,感動ing~。
目錄
2. 使用NPOI生成xls文件
2.1 創建基本內容
2.1.2 創建DocumentSummaryInformation和SummaryInformation
2.2 單元格操作
2.3 使用Excel公式
2.4 創建圖形
2.6 高級功能
3. 項目實踐