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

Android Studio中从Assets读取XLSX文件的Apache POI报错求助

解决Android中用Apache POI读取Assets里XLSX文件的问题

嘿,我一眼就揪出问题所在了——你错误地用了处理旧版Excel(.xls,OLE2格式)的POIFSFileSystem来读取新版的XLSX文件,这就是错误日志里OfficeXmlFileException的元凶!

错误根源

错误日志里的关键提示已经把问题说透了:

The supplied data appears to be in the Office 2007+ XML. You are calling the part of POI that deals with OLE2 Office Documents. You need to call a different part of POI to process this data (eg XSSF instead of HSSF)

简单来讲,POIFSFileSystem是给旧版.xls文件设计的,而你要读的.xlsx是基于XML的新格式,完全不需要经过这个类处理。

修正方案

直接跳过POIFSFileSystem这一步,把Assets的输入流直接传给WorkbookFactory.create()就行,它会自动识别文件格式,帮你创建对应的Workbook(XSSFWorkbook对应xlsx,HSSFWorkbook对应xls)。

修正后的点击事件代码如下:

// 点击事件函数内代码
InputStream in = null;
AssetManager assetManager = getApplicationContext().getAssets();
try {
    in = assetManager.open("cableSizing.xlsx");
    // 直接用输入流创建Workbook,无需POIFSFileSystem
    Workbook workbook = WorkbookFactory.create(in);
    
    // 后续操作示例:获取第一个工作表
    Sheet sheet = workbook.getSheetAt(0);
    // ... 这里写你的数据读取业务逻辑
    
} catch (IOException | InvalidFormatException e) {
    e.printStackTrace();
} finally {
    // 记得关闭输入流,避免资源泄漏
    if (in != null) {
        try {
            in.close();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

额外注意事项

  • 依赖检查:确保你在build.gradle里添加了正确的Apache POI依赖,针对XLSX文件,至少需要poi-ooxml相关依赖(如果担心包体积过大,可以考虑用精简版的poi-ooxml-lite)。
  • 文件路径:确认Assets文件夹里的cableSizing.xlsx路径完全正确,Android对Assets里的文件名大小写敏感,别写错字符。
  • 异常处理:务必保留完整的异常捕获和资源关闭逻辑,避免出现内存泄漏或崩溃问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.14 07:23:51