2009年6月30日 星期二

如何產生原生格式的 Excel 檔?

產生 Excel 的資料檔,是個老需求了。我也寫過一篇產生 Excel 檔的方法,陳述了我所知道的方法。
我最常使用的方法是 Report Service了,但美中不足的是,Report Service 必須將資料一次吃進來。
我所遇到的資料,有200多萬筆,一次吃進來,當然 Out of memory.

因此,我需要一個直接寫 原生格式的 Excel 檔,而非 csv, xml, html 等格式。

那到底什麼是原生格式呢?找到一個微軟開發的文件,

http://download.microsoft.com/download/0/B/E/0BE8BDD7-E5E8-422A-ABFD-4342ED7AD886/Excel97-2007BinaryFileFormat(xls)Specification.pdf,怕了吧,共三百多頁!

也有另一個 Open xml 的文件,http://sc.openoffice.org/excelfileformat.pdf,可惜必須以 office 2003 以上來開啟。我的客戶又是Excel 2002,開不了。

現在,找到了一個 open source 的元件, MyXLS,試用一下,還真的很簡單呢!也可支援中文。

可惜,超傷記憶體,寫出70453 筆資料,產生的過程中就使用了 7xx MB。12萬筆,就 out of memory。(我的開發機器,3GB memory,asp.net 最多可用 1.8GB)

其原理是在 memory 組物件,沒有作 swap 到 harddisk的動作。
這個問題,就像 XmlDocument 超傷記憶體一樣,之後才又出了個 XmlTextWriter

不過,若資料筆數少,則這個 MyXLS 可說是相當好用的了。

如果可以的話,想試試 Open XML Format SDK 2.0, 畢竟是微軟自家的東西,想來會比較好用。但現在仍在 CTP,而且 Excel 2002 開不了。

 

20090702 後記:

後來又找到了 NOPI ,看來比 MyXLS 更節省記憶體(26萬筆, 要864MB),且該元件更新頻率較多。比較建議用這個。

沒有留言:

Share with Facebook