我希望使用 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。谢谢! :)
最佳答案
尝试使用SXSSF工作簿,这对巨大的 xls 文档来说是个好东西,它的构建文档根本不占用 RAM,因为使用 nio
关于java - 使用java编写大型excel文件的API,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1486120/