В настоящее время у меня есть работающий писатель отчетов Excel со следующей функцией, используя JXLS 2.14.0: < /p>
public byte[] generateReport(String template, Map data) throws Exception {
try (InputStream is = new ClassPathResource(template).getInputStream();) {
try (ByteArrayOutputStream bos = new ByteArrayOutputStream();) {
Context context = new Context(data);
JxlsHelper.getInstance().processTemplate(is, bos, context);
return bos.toByteArray();
}
}
}
Итак, из того, что я могу отлаживать, это работает с использованием HSSFWorkBook, потому что шаблон, который я использую, является .xls
В настоящее время эта функция используется для создания отчета до 100 тыс. Строков и запускается с использованием планировщика, и проблема с памятью начинается (нормальное применение только ~ 100MB, но в норве, но ~ 100mbs, но Spikes of-a Recrods. Я пытаюсь оптимизировать это, обновляя шаблон для использования файла .xlsx и используя SXSSF, но из того, что я могу собрать, вам нужно иметь рабочую книгу xssf, а затем использовать Poitransformer.createsxssftransformer () , чтобы обернуть его в SXSS, но я не вижу, чтобы он был в выходе. Вот где я сейчас нахожусь: < /p>
public byte[] generateReport(String template, Map data) throws Exception {
try (InputStream is = new ClassPathResource(template).getInputStream();
ByteArrayOutputStream bos = new ByteArrayOutputStream()) {
XSSFWorkbook workbook = new XSSFWorkbook(is);
PoiTransformer transformer = PoiTransformer.createSxssfTransformer(workbook, 100, true, true);
transformer.setOutputStream(bos);
Context context = new Context(data);
JxlsHelper.getInstance()
.setUseFastFormulaProcessor(false)
.processTemplate(context, transformer);
transformer.getWorkbook().write(bos);
return bos.toByteArray();
}
}
< /code>
Я в настоящее время тестирую его только с помощью следующего модульного теста: < /p>
@Test
public void generateReportTest() throws Exception {
byte[] test = service.generateReport(TEMPLATE_XLSX, data);
Assertions.assertNotNull(test);
}
< /code>
И это продолжает сбой со следующим исключением: < /p>
java.io.FileNotFoundException: D:\poifiles\poi-sxssf-sheet-xml10363959800900568820.gz (The system cannot find the file specified)
Подробнее здесь: https://stackoverflow.com/questions/796 ... sing-sxssf