Java poi 3.11 проблема при формировании XLSX
Ситуация следующая: пытаюсь с помощью одного и того же кода создать xlsx файл и поместить его в папку сначала в веб-приложении, а затем в обычном десктопном.
Код:
SXSSFWorkbook workbook = new SXSSFWorkbook();
Sheet sheet = workbook.createSheet();
for(int i = 0; i < 70000; i++) {
Row row = sheet.createRow(i);
for(int j = 0; j < 10; j++){
Cell cell = row.createCell(j);
cell.setCellValue(i*j);
}
}
FileOutputStream out = new FileOutputStream(new File("D:\\workbook1.xlsx"));
workbook.write(out);
out.flush();
out.close();
workbook.dispose();
При этом то, что получается в результате работы веб-приложения, недоступно для открытия в Офисе Майкрософт 2013, OpenOffice - сообщение о неверном содержимом или неверном расширении. Результат работы десктопного приложения открывается без какого-либо сообщения.
Начал копать глубже - открыл оба результата архивом и просмотрел xml - вот что обнаружил:
xlsx, который открывается, содержит заголовок: xml version="1.0" encoding="UTF-8" standalone="no"
и атрибут в корневом теге xmlns="http://schemas.openxmlformats.org/package/2006/relationships"
в xlsx, который не открывается: ... standalone="yes"
и отсутствует атрибут xmlns="http://schemas.openxmlformats.org/package/2006/relationships"
Дальнейший анализ показал, что такое отличие в ряде файлов xml структуры xslx. И это единственное отличие. Следовательно, проблема именно в этом. Кстати, многие xml из xlsx по этой причине не валидны. И еще... использование HSSFWorkbook и получение xls не приводит к такой проблеме. Использование SXSSFWorkbook необходимо, т.к. есть ограничение по памяти, а количество строк может быть более 70000. Как же веб-приложение может влиять на формирование?