POI解析百萬行excel的實現

2021-07-23 04:37:24 字數 1862 閱讀 3740

poi 的usermodel api讀取大資料量excel會導致oom,可以使用eventmodel api來處理這種excel.

少量的行數excel可以用

xssfworkbook wb = new xssfworkbook(inputstream);  

xssfsheet sheet = wb.getsheetat(0);

iteratoriter = sheet.iterator();

boolean isfirstline = true;

while (iter.hasnext())

//解析excel,每行有11列,然後對每列解析出來之後呼叫後端服務把資料儲存到資料庫中,

} }

但是大於幾十萬行的時候就會出現 out of memory的錯誤。很簡單

xssfworkbook wb =new xssfworkbook(inputstream);
導致了記憶體溢位。

解決方法就是可以使用eventmodel api來處理這種excel.

new exceleventusermodelparse(filepath)

.sethandler(new exceleventusermodelparse.******sheetcontentshandler() else

}}).parse();

table就是解析出來的結果

public

class

exceleventusermodelparse

public exceleventusermodelparse sethandler(sheetcontentshandler handler)

public

void

parse() catch (exception e) finally catch (ioexception e)

}if (pkg != null) catch (ioexception e) }}

}private

void

processsheet(stylestable styles, readonlysharedstringstable strings, inputstream sheetinputstream)

throws saxexception, parserconfigurationexception, ioexception else

sheetparser.parse(new inputsource(sheetinputstream));

}public

static

class

******sheetcontentshandler

implements

sheetcontentshandler else

row = new importdecryptmodel();

}@override

public

void

endrow(int rownum)

@override

public

void

cell(string cellreference, string formattedvalue, xssfcomment comment) }}

@override

public

void

headerfooter(string text, boolean isheader, string tagname)

}

解析的工作全部在cell()裡面,速度大約100萬條記錄20s左右。關鍵不會記憶體溢位

poi百萬級資料匯出excel

通過傳入實體類陣列和指定匯出列來即可,匯出excel,讀者可直接複製到專案直接使用,下面只是個簡單的示例提供參考 一 匯出excel工具類 匯出實體類 param head 表頭 param exportcolumn 匯出字段 param exportlist 實體陣列 param clazz 實體...

使用POI解析Excel

最近在寫專案,涉及到批量新增學生資訊,通過網上查了眾多資料,終於通過上傳乙個excel檔案的方式加以解決,現特此記錄下來,以備以後檢視。解析的核心 suppresswarnings static access public static listreadxls inputstream inputst...

Excel 的處理一 POI 解析excel

03與07版本excel區別 一 字尾不同 前者.xls,後者.xslx 二 前者行數有最大行數限制 最大65536行 後者無行數限制 1.1 簡單方式 載入檔案路徑 獲取流 new fileinputstream filepath 再把流放入到工作簿裡,此時inputstream物件就讀取到工作簿...