Ошибка при чтении больших файлов Excel (xlsx) через Apache POI
Я пытаюсь читать большие файлы Excel XLSX через Apache POI, скажем, 40-50 МБ. Я получаю исключение памяти. Текущая куча памяти составляет 3 ГБ.
Я могу читать меньшие файлы 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);
но это было дорого для API Apache POI, поэтому я переключился на пакетный подход OPC, но все тот же эффект. Мне не нужно анализировать или обрабатывать файл, просто прочитайте его и верните.