2010-01-15 96 views
4

我正在尋找一個簡單的解決方案來輸出大的excel文件。輸入數據來自數據庫,我想直接將Excel文件輸出到磁盤,以儘可能降低內存消耗。我看過Apache POI或jxls之類的東西,但沒有辦法解決我的問題。將Excel數據直接寫入OutputStream(限制內存消耗)

而作爲額外的信息,我需要爲2007年之前的Excel生成.xls文件,而不是新的.xlsx xml格式。我也知道我可以生成CSV文件,但我寧願生成普通的Excel ...

任何想法?

我意識到我的問題不是那麼清楚,我真的希望能夠寫excel文件,而不必整體保持在內存中...

+0

http://stackoverflow.com/questions/1842244/writing-large-excel-spreadsheets – pstanton 2010-01-15 12:00:51

+1

我看到這個問題,即使標題很相似,我只對編寫excel文件感興趣,不需要閱讀它們。我專門尋找一種方法來保持整個excel文件在內存中...... – pgras 2010-01-15 12:12:30

回答

6

有效地做到這一點的唯一方法是使用字符基礎的CSV或XML(XLSX)格式,因爲它們可以通過線被寫入到輸出行,這樣就可以每saldo只有一行一次在記憶中。 二進制基於XLS格式必須首先填充完全內存之前,它可以寫入輸出,這當然是記憶大量記錄的情況下內存佔用。

我建議使用CSV,因爲它可能比XML更高效,再加上你有這樣的優勢,即任何像樣的數據庫服務器都具有導出功能,因此您不需要program/include任何新功能在Java中。我不知道你正在使用哪個數據庫,但是如果它是例如MySQL,那麼你可以使用LOAD DATA INFILE

+0

感謝您的回答,我認爲我會去CSV,直到我的公司遷移到較新的Office版本,然後繼續使用xlsx。你知道一個庫來逐行生成xlsx嗎? – pgras 2010-01-15 12:33:04

2

不知道產生一個真正的XSL文件。但是,你可以直接寫一個HTML文件或包含OPenDocument電子表格中的壓縮數據流(我猜msexcel的可以讀稍後格式)

+0

HTML是一個非常糟糕的主意。不要這樣做。 Excel會在編輯/保存時將其搞亂,最新版本會抱怨不支持的文件格式。僅限使用XLS/XLSX/CSV。 – BalusC 2010-01-15 12:07:24

2

JExcelAPI常被推薦爲更多的內存有效的替代到Apache POI。