Re: [問題] 有關Java Excel

看板java作者 (Willie Liao)時間18年前 (2008/03/29 11:35), 編輯推噓3(300)
留言3則, 3人參與, 最新討論串2/4 (看更多)
好吧,把我們公司的商業機密教妳,不過這只適合一次性的exporting 這個寫出大量資料到xls的我們公司的產品(商業智慧軟體)也會碰到 客戶數十tb的dwh做出來的報表動輒上百萬筆資料,在網頁上還可以一頁一頁 顯示,但是要直接一次dump到binary format的excel記憶體一下就被吃完了, 怎麼辦呢? 好,第一步,請先開啟excel新建一個xls檔,把他做成妳要輸出的格式。 第二步,檔案-另存新檔-請存成xml格式。 用notepad或textpad打開這個檔案妳會發現 這是一個標準的xml檔案,標頭長的像這樣: <?xml version="1.0"?> <?mso-application progid="Excel.Sheet"?> <Workbook xmlns="urn:schemas-microsoft-com:office:spreadsheet" xmlns:o="urn:schemas-microsoft-com:office:office" xmlns:x="urn:schemas-microsoft-com:office:excel" xmlns:ss="urn:schemas-microsoft-com:office:spreadsheet" .. 原來excel檔裡面的每一個cell就成了xml裡面的一個element。 再來,把這個xml檔的副檔名改成.xls。再用excel開啟 -- 顯示的跟原來的binary 的excel一樣耶~看出trick了嗎? 只要把標頭和格式的xml elements 先寫出去,然後每從TXT檔讀近一筆資料就加上 xml tag寫到file system裡,就不會有outofmemory的issue了。 ※ 引述《kojinvhfsk (野砲蕃薯)》之銘言: : 最近增加了一項需求,需要將Txt檔同樣輸出至Xls檔 : 但這Txt檔算是蠻大的(都是n個欄位*n萬筆資料) : 於是,就造成了記憶體不足的情況(問題1) : 問題1: 當我新增資料至Xls檔時,新增了一堆Cell至Sheet時,這些Cell都是存在記憶體 : 直到最後workbook.write()時,才一次寫入至檔案,只能這樣子使用嗎? : 無法自己控制哪些Cell要先寫入檔案,而不放在記憶體裡嗎? : 問題2: 透過JDBC將Xls當做資料庫來使用,同樣要建立Table(也就是Sheet), : 並設定其欄位型態,為何設定為varchar的欄位,在用Excel開啟Xls檔後, : 他的欄位資料都會多加個「'」呢?(ex.男,就會變成'男) : 問題3: 當我用JDBC將n欄*n萬筆資料,全部輸出至Xls檔後,但接下來, : 我在別的功能裡,需要再新增Sheet到這個Xls檔, : 但…卻在createWorkbook的時候出現記憶體不足!!! : 我想請問的是,Java Excel開啟一個Xls檔後,是將其內的所有資料(Sheet、Cell) : 全都放到記憶體嗎…?有可能是這樣子嗎? : 以上…還煩請有經驗的前輩們指點一二…頭痛啊…頭痛… -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 98.204.128.203

03/29 14:23, , 1F
我只想到csv...忘記還有XML XD
03/29 14:23, 1F

03/29 14:59, , 2F
csv只能有1個Sheet…可惡啊…
03/29 14:59, 2F

03/29 19:31, , 3F
受教了!
03/29 19:31, 3F
文章代碼(AID): #17xRZcxU (java)
文章代碼(AID): #17xRZcxU (java)