You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用SheetContentsHandler读取大Excel时Apache POI抛出NPE

解决XSSFSheetXMLHandler解析Excel时的空指针异常

你遇到的空指针异常,核心原因是初始化XSSFSheetXMLHandler时没有传入SharedStringsTable实例。Excel的XLSX格式会将重复字符串存入共享字符串表,单元格仅存储索引,解析时必须通过该表获取实际字符串,空的实例会导致调用getItemAt方法时触发空指针。

修改后的主代码

OPCPackage pkg = OPCPackage.open(file);
XSSFReader reader = new XSSFReader(pkg);

// 关键步骤:获取共享字符串表实例
SharedStringsTable sst = reader.getSharedStringsTable();
InputStream sheet = reader.getSheet("rId1");
XMLReader parser = XMLHelper.newXMLReader();
CustomXSSFSheetHandler sheetHandler = new CustomXSSFSheetHandler();

// 初始化XSSFSheetXMLHandler时传入sst(第二个参数)
parser.setContentHandler(new XSSFSheetXMLHandler(null, sst, sheetHandler, false));

InputSource sheetSource = new InputSource(sheet);
parser.parse(sheetSource);

recordList = sheetHandler.getRecords();

// 关闭资源,避免泄漏
sheet.close();
pkg.close();

补充说明

  1. SharedStringsTable的作用:XLSX文件会把重复出现的字符串统一存储,单元格仅记录索引,解析时必须通过该表把索引转换为实际文本,不传的话遇到这类单元格就会报错。
  2. 资源关闭:新增pkg.close()确保OPCPackage资源被释放,避免文件被占用。
  3. 格式兼容:当前代码中formattedValue已经是Excel显示的格式化字符串,你的类型转换逻辑(转Long/Double)需要确保对应列的内容确实是数字,否则会抛出NumberFormatException,可以根据实际情况添加异常处理。

内容的提问来源于stack exchange,提问作者Asim

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.08 06:35:40