使用java编写大型Excel文件的API
2022-09-03 05:19:38
我希望使用Java以编程方式写入excel(.xls MS Excel 2003格式)文件。Excel输出文件可能包含约200,000行,我计划将其拆分为多个工作表(由于excel限制,每工作表64k行)。
我尝试过使用apache POI API,但由于API对象模型,它似乎是一个内存占用。我被迫将单元格/工作表添加到内存中的工作簿对象,只有在添加所有数据后,我才能将工作簿写入文件!以下是apache如何建议使用其API编写Excel文件的示例:
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堆空间”。
我尝试使用 Xms 和 Xmx 参数作为 Xms512m 和 Xmx1024 来增加 JVM 初始堆大小和最大堆大小。仍然无法向文件写入超过 150k 行。
我正在寻找一种流式传输到excel文件的方法,而不是在将整个文件写入磁盘之前在内存中构建整个文件,这有望节省大量内存使用量。任何替代的API或解决方案都将不胜感激,但我仅限于使用java。谢谢!:)