Java Apache POI Excel读取异常

标签 java excel apache-poi

我正在尝试使用 POI 来读取 Excel 文件。这将是一个大文件(> 50k 行)所以我使用 eventusermodel 而不是将整个文件读入内存的更简单的 usermodel。我的代码如下所示:

    File file = new File("C:\\bigfile.xls");
    InputStream input = new FileInputStream(file);
    EventRecordFactory factory = new EventRecordFactory(new ERFListener() {
        @Override
        public boolean processRecord(Record rec)
        {
            return true;
        }
    }, RecordFactory.getAllKnownRecordSIDs());
    factory.processRecords(input);

但我得到了异常(exception)

org.apache.poi.hssf.record.RecordFormatException: The content of an excel record cannot exceed 8224 bytes

这个异常应该在 3.5 中得到修复,但是,我使用的是 3.6,我也尝试了从 POI 获取最新的 trunk pull,但仍然是同样的问题。

我试过将文件缩小到只有几行但出现相同的错误。以前有人处理过这个问题吗?

谢谢, 杰夫

最佳答案

你应该使用 EventRecordFactory .processRecords 方法与 DocumentInputStream类型作为它的参数。 (而不是纯 FileInputStream)。

POIFSFileSystem poifs = new POIFSFileSystem(input);
DocumentInputStream documentInputStream = poifs.createDocumentInputStream("Workbook");
factory.processRecords(documentInputStream);

关于Java Apache POI Excel读取异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2180293/

相关文章:

java - 在 POI 中过滤 Excel 中的列时删除考虑空白

java - 在带有 POI 的 Excel 单元格中显示 0 而不是错误值

java - 如何调用Drools excel决策表函数

php - 使用 PHP 生成 MySQL 到 Excel

java - 您可以远程调试在 Graal JVM 中运行的 Graal.js 脚本吗?

java - 如何刷新 Recyclerview 中的项目位置以进行过滤?

java - 使用 POI 将不同的数据类型写入 Excel

excel - 如何使用大型 Excel 文件的 XSSF 和 SAX(事件 API)获取命名范围、工作表名称和引用公式的列表

java - 加载多个 YAML 文件(使用@ConfigurationProperties?)

java - close without flush 的文档在哪里