OutofMemoryError:写入大号时的Java堆空间。行到xls文件

时间:2013-11-15 07:23:57

标签: java jexcelapi

我需要在xls文件(Microsoft 97-xp)中写入超过1,000,000行的结果集。所以我试图使用JExcel API但是我得到错误OutOfMemoryError:Java堆空间。除了增加JVM内存或创建不同的Excel文件然后手动合并之外,我该如何解决这个问题。我甚至不想创建CSV文件。请帮忙。

示例代码:

int sheetNumber = 1;
int maxSheetSize=65000;
int start = 0;
int end=maxSheetSize;
int totalsize=1000000;
int completed = 0;
int columnCount=10;
WritableWorkbook workbook = Workbook.createWorkbook(new File("output.xls"));

while (completed < totalsize) {
    WritableSheet sheet = workbook.createSheet("Sheet " + (sheetNumber++), 0);
    for (int r = start; r < end; r++) {
        int i=1;
        for (int c = 0; c < columnCount; c++) {
            Label label = new Label(c, i, "data from resultset");
            sheet.addCell(label);
        }
        i++;
    }
    completed += (end - completed);
    start = end;
    end = (totalsize - completed) < maxSheetSize ? (totalsize - completed) : completed + maxSheetSize;
    end = end < maxSheetSize ? totalsize : end;
}
workbook.write();
workbook.close();

2 个答案:

答案 0 :(得分:2)

旧版本的excel格式仅支持65,536行乘256列。

“所有现有的Java API都尝试一次在RAM中构建整个文档。尝试编写一个符合新的xslx文件格式的XML文件。为了帮助您入门,我建议您在所需的内容中构建一个小文件在Excel中创建并保存。然后打开它并检查结构并替换所需的部件。“ Aaron Digulla - API to write huge excel files using java

答案 1 :(得分:0)

直到Excel 2003,最大行数为65,536 即使您使用的是更高版本,我也建议您重新打开工作表并附加说明最大行数(可能为10000)。关闭,打开并重复。