我想通過Apache POI讀取大型Excel文件xlsx,比如說40-50 MB。我越來越內存異常。目前的堆內存是3GB。通過Apache POI讀取大型Excel文件(xlsx)時出錯
我可以讀取較小的excel文件,沒有任何問題。我需要一種方式來讀取大型的Excel文件,然後通過Spring excel視圖作爲迴應。
public class FetchExcel extends AbstractView {
@Override
protected void renderMergedOutputModel(
Map model, HttpServletRequest request, HttpServletResponse response)
throws Exception {
String fileName = "SomeExcel.xlsx";
response.setContentType("application/vnd.openxmlformats-officedocument.spreadsheetml.sheet");
OPCPackage pkg = OPCPackage.open("/someDir/SomeExcel.xlsx");
XSSFWorkbook workbook = new XSSFWorkbook(pkg);
ServletOutputStream respOut = response.getOutputStream();
pkg.close();
workbook.write(respOut);
respOut.flush();
workbook = null;
response.setHeader("Content-disposition", "attachment;filename=\"" +fileName+ "\"");
}
}
我第一次開始使用關XSSFWorkbook workbook = new XSSFWorkbook(FileInputStream in);
但是這是每Apache的POI API昂貴,所以我切換到OPC包的方式,但還是同樣的效果。我不需要解析或處理文件,只需讀取並返回即可。
嘗試SXSSF http://poi.apache.org/spreadsheet/index.html – Alfabravo
我需要一個示例。我在網上搜索,但找不到一個通過SXSSF閱讀大單的例子,否則首先不會問這個問題。 – jamesT
@jamesT你運行過這個選項嗎? -Xms1024M -Xmx2048M – chrome