2 回答

TA貢獻1843條經驗 獲得超7個贊
先確定一下你的格式,到底是xlsx還是xls,看你說想要有20萬行,我印象里面xls是沒法到20萬行的(最多65535行),列也有限制(貌似255),但是xlsx是沒這個限制的(或者說限制寬松很多)
如果是xlsx的話,你可以新建一個xlsx文件,然后把后綴改成zip,然后解壓縮,看看生成的結果,是一堆文本文件。然后你加一行數據,再改后綴,解壓縮,看看結果,你會發現,xlsx文件的更新實際上就是更新xml的一個操作。
那么你應該明白了,你后臺需要做的就是做xml文件,然后zip壓縮后把后綴改成xlsx,這樣的話,不會涉及到POI那些很耗內存的操作,應該是很容易做到你要的效果的。
如果是xls格式,那么首先行數達不到你的要求。如果強行要做,那么推薦你還是先把數據查出來放在文本文件里面,然后調用另一個process來在外部運行來完成這步工作(或者干脆連查詢所有的事情都交給外部進行,這時候是啟動另一個java虛擬機,占用的是別的內存,甚至可以交給別的server來干這件事),你的程序可以輪詢這個工作做完沒有,做完后再下載。
說實話,我覺這種需求的正路就是應該是異步另外一個process去做,做完之后再下載。
否則用戶畫面上點個按鈕,數據量超大的情況下你讓他等20分鐘是不是很蠢?應該給他一個機制告訴他這個事很花時間,現在正在做,做完后讓他自己下載是比較合適的作法。
如果一定要在畫面上的一次請求搞定的話,參考我說的用xlsx或者輪詢另外一個process的作法應該能搞定你的需求。
- 2 回答
- 0 關注
- 320 瀏覽
添加回答
舉報