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物件就讀取到工作簿...