我正在寻找使用Java以编程方式写入excel(.xls MS Excel 2003格式)文件。 excel输出文件可能包含〜200,000行,我打算将其分割成多个页面(每页64k行,由于excel的限制)。使用java编写巨大的excel文件的API
我尝试过使用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。谢谢! :)
你可以看看:http://stackoverflow.com/questions/6004379/java-write-excel-files-with-poi-event-model – ParagJ
只有1024m?尝试4086(4演出)。有时我们会在工作中运行8个gms vms)。电子表格是这样设计的,甚至可以同时在电子表格的一部分上工作? –