0

我需要在 xls 文件(Microsoft 97-xp)中编写超过 1,000,000 行的结果集。所以我正在尝试使用 JExcel API 但我收到错误 OutOfMemoryError: Java heap space 。除了增加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();
4

2 回答 2

2

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

“所有现有的 Java API 都尝试一次在 RAM 中构建整个文档。尝试编写一个符合新 xslx 文件格式的 XML 文件。为了让您开始,我建议在 Excel 中以所需的形式构建一个小文件并保存它。然后打开它并检查结构并更换您想要的零件。Aaron Digulla -使用 java 编写大型 excel 文件的 API

于 2013-11-15T07:29:11.830 回答
0

在 Excel 2003 之前,最大行数为 65,536。
即使您使用更高版本,我也建议您重新打开工作表并附加一个最大行数(可能是 10000)。关闭、打开并重复。

于 2013-11-15T07:31:11.787 回答