Я хочу писать в формате excel (.xls MS Excel 2003) программно с помощью Java. Выходные файлы excel могут содержать ~ 200 000 строк, которые я планирую разделить на количество листов (64k строк на листе из-за предела excel).
Я попытался использовать API-интерфейс apache POI, но, похоже, это зависание памяти из-за объектной модели API. Я вынужден добавлять ячейки/листы к объекту книги в памяти, и только после того, как все данные будут добавлены, я могу написать книгу в файл! Вот пример того, как apache рекомендует писать файлы excel с помощью их API:
Workbook wb = new HSSFWorkbook();
Sheet sheet = wb.createSheet("new sheet");
//Create a row and put some cells in it
Row row = sheet.createRow((short)0);
// Create a cell and put a value in it.
Cell cell = row.createCell(0);
cell.setCellValue(1);
// Write the output to a file
FileOutputStream fileOut = new FileOutputStream("workbook.xls");
wb.write(fileOut);
fileOut.close();
Очевидно, что запись строк ~ 20k (с примерно 10-20 столбцами в каждой строке) дает мне ужасное "java.lang.OutOfMemoryError: Java heap space".
Я попытался увеличить начальный размер кучи JVM и максимальный размер кучи, используя параметры Xms и Xmx как Xms512m и Xmx1024. Все еще не могу записать в файл более 150 тыс. Строк.
Я ищу способ переместить файл excel вместо создания всего файла в памяти, прежде чем записывать его на диск, который, мы надеемся, сэкономит много памяти. Любые альтернативные API или решения будут оценены, но я ограничусь использованием java. Благодарю!:)