將web頁面上顯示的報表匯出到excel檔案裡是一種很常見的需求。潤幹報表的類excel模型,支援excel檔案資料無失真的匯入匯出,使用起來非常的方便。然而,當資料量較大的情況下,excel本身的支援最多65535行資料的問題便凸顯出來。下面就給出大資料量匯出到excel的解決方案。
首先,對於資料超過了65535行的問題,很自然的就會想到將整個資料分塊,利用excel的多sheet頁的功能,將超出65535行後的資料寫入到下乙個sheet頁中,即通過多sheet頁的方式,突破了最高65535行資料的限定。
具體做法就是,單獨做乙個鏈結,使用jsp匯出,在jsp上通過程式判斷報表行數,超過65535行後分sheet寫入。這樣這個問題就得以解決了。
更進一步地說,在這種大資料量的報表生成和匯出中,要占用大量的記憶體,尤其是在使用tomcat的情況下,jvm最高只能支援到2g記憶體,則會發生記憶體溢位的情況。此時的記憶體開銷主要是兩部分,一部分是該報表生成時的開銷,另一部分是該報表生成後寫入乙個excel時的開銷。由於jvm的gc機制是不能強制**的,因此,對於此種情形,我們給出乙個變通的解決方案。
首先,將該報表設定起始行和結束行引數,在api生成報表的過程中,分步計算報表,比如一張20萬行資料的報表,在生成過程中,可通過起始行和結束行分4-5次進行。這樣,就降低了報表生成時的記憶體占用,在後面報表生成的過程中,如果發現記憶體不夠,即可自動啟動jvm的gc機制,**前面報表的快取。
匯出excel的過程,放在每段生成報表之後立即進行,改多個sheet頁為多個excel,即在分步生成報表的同時分步生成excel,則通過poi包生成excel的記憶體消耗也得以降低。通過多次生成,同樣可以在後面excel生成所需要的記憶體不足時,有效**前面生成excel時占用的記憶體。
再使用檔案操作,對每個客戶端的匯出請求在伺服器端根據sessionid和登陸時間生成唯一的臨時目錄,用來放置所生成的多個excel,然後呼叫系統控制台,打包多個excel為rar或者jar方式,最終反饋給使用者乙個rar包或者jar包,響應客戶請求後,再次呼叫控制台刪除該臨時目錄。
php 大資料量匯出
之前的正常匯出,幾萬條資料就把記憶體擠爆了,優化了一下匯出方式,記憶體無壓力匯出速度槓槓的 會員時手機匯出 public function user outputexcel else count count data num 0 f null foreach this getcounts count...
如何解決匯出大資料量的Excel,FullGc問題
public static void main string args int groupsize 10 定長sheet int length dataset.size 能分幾段 計算需要匯出的資料可以分成多少組 int num length groupsize 1 groupsize 為何用 sx...
MySQL大資料量的匯入與匯出
如果要匯出資料庫中的一張表或幾張表而不是全部使用的命令是mysqldump.exe umysql的使用者名稱 pmysql的密碼 資料庫名 表名1 表名2 要儲存的路徑和檔案 資料庫名後加空格表名就可以了,有多張表的話使用空格隔開 例如執行mysqldump uroot proot demo use...