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

Apache POI是否支持修改带密码保护的XLSX文件?修改后密码丢失怎么办?

Apache POI修改加密XLSX后密码消失的问题及解决办法

问题原因

Apache POI读取加密XLSX文件时,会解密内容加载到内存,但默认不会保留原文件的加密配置。调用wb.write()写入文件时,只会输出未加密的工作簿内容,因此保存后的文件失去密码保护。

解决办法

修改完成后需要手动重新设置加密参数,对文件进行加密处理。以下是适配Apache POI 5.2.1的代码示例:

File file = new File("Test2.xlsx");
XSSFWorkbook wb = (XSSFWorkbook) WorkbookFactory.create(file, "password");

// 执行你的修改操作
wb.createSheet("Test0001");

// 重新设置加密并写入文件
EncryptionInfo info = new EncryptionInfo(EncryptionMode.agile);
Encryptor encryptor = info.getEncryptor();
encryptor.confirmPassword("password"); // 可使用原密码或设置新密码

try (OutputStream encryptedStream = encryptor.getDataStream();
     FileOutputStream fileOutputStream = new FileOutputStream(file)) {
    wb.write(encryptedStream);
    // 将加密后的内容写入文件
    ((POIFSFileSystem)encryptedStream.getChannel().getFileDescriptor().sync()).writeFilesystem(fileOutputStream);
} finally {
    wb.close();
}

注意事项

  • 确保项目中poi和poi-ooxml依赖版本统一为5.2.1,避免版本冲突
  • EncryptionMode.agile是XLSX文件的主流加密模式,适配Office 2010及以上版本;若需兼容Office 2007,可替换为EncryptionMode.standard
  • 重新加密时可灵活选择原密码或新密码,只需修改confirmPassword方法的参数

内容的提问来源于stack exchange,提问作者search-coder

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.06 01:15:51