excel Apache poi应用程序在阅读50万行文件时卡住

rjee0c15  于 2023-04-07  发布在  Apache
关注(0)|答案(1)|浏览(172)

我使用下面的代码来读取非常大的excel文件多达50万行,最多100列。

public List<ExcelLine> getExcelLines(Path path, int batchSize) {

    log.info("Reading excel file");

    try (Workbook workbook = WorkbookFactory.create(path.toFile())) {
      Sheet sheet = workbook.getSheetAt(0);
      ...
    }
}

这个想法是批量读取,以避免OutOfMemory错误,它适用于小文件。然而,一旦我用大文件调用该方法,我看到log.info语句,但随后应用程序陷入困境。因此try-with-resources语句中的断点不可达。
有人知道在这种情况下该怎么办吗?

smdncfj3

smdncfj31#

最流行的suggestion不适合我,因为它已经2年没有更新了,并且与最新的Apache POI实现有冲突。我找到了另一个repo,它本质上是原始repo的一个分支,但有更新:https://github.com/pjfanning/excel-streaming-reader。这是适合我的代码:

try (InputStream inputStream = Files.newInputStream(file.getFileLocation());
     Workbook workbook = StreamingReader.builder().setAvoidTempFiles(false).bufferSize(4096).open(inputStream)) {
...
}

相关问题