百(千)萬級excel匯出 流式

2021-08-10 17:33:07 字數 1544 閱讀 8894

背景介紹:我負責的有個條形碼的模組,目前110w資料,未來還會繼續新增,需要做乙個excel匯出的功能。

org.apache.poi

poi-ooxml

3.16-beta2

主要思路: 頁面發出匯出請求,在controller裡面做處理。controller裡面主要做:

1.拿到請求引數

2.分頁查詢資料庫

3.將每次分頁查到的資料,裝入sxssfworkbook

效果:我這個表也是十幾個字段,無大字段。實測匯出100w條用時61s,excel檔案大小68m;匯出1000w條534s,excel檔案大小464m。

下面是controller原始碼

// 構造乙個空的工作簿並指定行訪問視窗。

sxssfworkbook wb = new sxssfworkbook(1);

sheet sh = null;

row row = null;

cell cell = null;

for (int i = 0; i <= cycle; i++)

sh = wb.createsheet(string.valueof(i+1));

barcodepoiutil.setexcelcontent(list, tableheader, row, sh, cell);

}bufferedoutputstream out = null;

string filename = "barcodedatas.xlsx";

try catch (ioexception e) finally

// 處理在磁碟上備份此工作簿的臨時檔案

wb.dispose();

} catch (ioexception e)

}long endtime = system.currenttimemillis();

log.info("【 " + this.getclass().getname() + " 】【 " + new ******dateformat("yyyy-mm-dd hh:mm:ss").format(new date()) + " 】 匯出:條形碼" + count + "條,用時:" + (endtime - starttime) / 1000 + " s");

}(在controller中被呼叫)工具方法:將查到的資料,裝入sheet

public class barcodepoiutil 

// 建立表內容

for (int a = 0; a < list.size(); a++) }}

}}

百(千)萬級excel匯出 流式

org.apache.poigroupid poi ooxmlartifactid 3.16 beta2version dependency 效果 我這個表也是十幾個字段,無大字段。實測匯出100w條用時61s,excel檔案大小68m 匯出1000w條534s,excel檔案大小464m。不是很規...

千萬級資料匯出excel的一點心得

最近做了個專案,使用mysql資料庫,要求做到千萬級的資料用excel匯出,試了良久,找出了幾個方法.1.分批讀取,用limit,這個資料量小的時候還行,資料量一大當場傻眼 2.使用流式讀取,耗時3分鐘,速度還可以再優化,就是占用記憶體太大,1000w資料佔了3g運存,關鍵字為 resultsett...

用輸出流匯出EXCEL,在2007下開啟亂碼問題

該方法試用與2003與2007,可以匯出多個sheet.不會有亂碼.具體如下 system.io.stringwriter sw new system.io.stringwriter system.web.ui.htmltextwriter hw new system.web.ui.htmltext...