当前位置:  开发笔记 > 编程语言 > 正文

使用java编写大量excel文件的API

如何解决《使用java编写大量excel文件的API》经验,为你挑选了2个好方法。

我期待使用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参数将XVM初始堆大小和最大堆大小增加为Xms512m和Xmx1024.仍然无法向文件写入超过150k行.

我正在寻找一种流式传输到excel文件的方法,而不是在将其写入磁盘之前在内存中构建整个文件,这有望节省大量内存.任何替代API或解决方案都将受到赞赏,但我仅限于使用java.谢谢!:)



1> Serhii Bohut..:

尝试使用SXSSF工作簿,这对于巨大的xls文档,它的构建文档很棒,并且根本不吃RAM,因为使用了nio



2> Aaron Digull..:

所有现有的Java API都尝试一次在RAM中构建整个文档.尝试编写符合新xslx文件格式的XML文件.为了帮助您入门,我建议您在Excel中以所需的形式构建一个小文件并保存.然后打开它并检查结构并更换所需的部件.

维基百科有一篇关于整体格式的好文章.


@Jass:您使用的是Office 2003但需要写入150k行吗?我认为只有2007年的Office版本能够使用超过65536行...... http://en.wikipedia.org/wiki/Excel_2003
推荐阅读
郑谊099_448
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有