我希望使用 Java 以编程方式写入 excel(.xls MS Excel 2003 格式)文件。excel 输出文件可能包含约 200,000 行,我计划将这些行拆分为多个工作表(每张工作表 64k 行,由于 excel 限制)。
我曾尝试使用 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 heap space”。
我尝试使用 Xms 和 Xmx 参数作为 Xms512m 和 Xmx1024 增加 JVM 初始堆大小和最大堆大小。仍然无法将超过 150k 行写入文件。
我正在寻找一种流式传输到 excel 文件的方法,而不是在将整个文件写入内存之前将其构建到内存中,这有望节省大量内存使用。任何替代 API 或解决方案将不胜感激,但我仅限于使用 java。谢谢!:)