Błąd podczas odczytywania dużych plików Excel (xlsx) Przez POI Apache
Próbuję odczytać duże pliki Excela xlsx za pośrednictwem Apache POI, powiedzmy 40-50 MB. Wychodzę z wyjątku pamięci. Aktualna pamięć sterty to 3 GB.
Mogę czytać mniejsze pliki Excela bez żadnych problemów. Potrzebuję sposobu, aby odczytać duże pliki Excela, a następnie je z powrotem jako odpowiedź za pośrednictwem Spring excel view.
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+ "\"");
}
}
Najpierw zacząłem używaćXSSFWorkbook workbook = new XSSFWorkbook(FileInputStream in);
ale to było kosztowne dla API Apache POI, więc przełączyłem się na pakiet OPC, ale ten sam efekt. Nie muszę parsować ani przetwarzać pliku, wystarczy go przeczytać i zwrócić.