gpt4 book ai didi

java - 使用 Java 读取受密码保护的 Excel 文件(.xlsx)

转载 作者:太空宇宙 更新时间:2023-11-04 06:32:09 24 4
gpt4 key购买 nike

我已经尝试过以下代码,

import org.apache.poi.poifs.crypt.Decryptor;
import org.apache.poi.poifs.crypt.EncryptionInfo;
import org.apache.poi.poifs.filesystem.POIFSFileSystem;

POIFSFileSystem fs = new POIFSFileSystem(new FileInputStream("D://protectedfile.xlsx"));
EncryptionInfo info = new EncryptionInfo(fs);
Decryptor d = new Decryptor(info); //Error
d.verifyPassword(Decryptor.DEFAULT_PASSWORD);

它抛出错误编译错误:无法实例化类型 Decryptor

但最终这个方法将需要我复制并创建新的工作簿,我可以在其中读取数据。

  1. 为什么我无法实例化 Decryptor?
  2. 除此之外还有其他方法吗,以便我可以简单地读取受密码保护的 Excel 文件,而无需创建其副本

注意:我看过这篇文章reading excel file ,但对我的具体情况没有帮助

最佳答案

啊,我发现你的问题了。就是这一行:

Decryptor d = new Decryptor(info);

Apache POI Encryption documentation所示,该行需要是

Decryptor d = Decryptor.getInstance(info);

建议您review the POI docs on encryption ,并确保您使用的是最新版本的 Apache POI(截至撰写本文时为 3.11 beta 2)

此外,从 InputStream 打开文件不是 recommended, as per the documentation ,因为它速度较慢且内存较高(所有内容都必须进行缓冲)。相反,您的代码实际上应该是:

NPOIFSFileSystem fs = new NPOIFSFileSystem(new File("D://protectedfile.xlsx"));
EncryptionInfo info = new EncryptionInfo(fs);
Decryptor d = Decryptor.getInstance(info);
if (d.verifyPassword("password")) {
XSSFWorkbook wb = new XSSFWorkbook(d.getDataStream(fs));
} else {
// Password is wrong
}

最后,获取解密后的数据,并将其传递给XSSFWorkbook以读取加密的工作簿

关于java - 使用 Java 读取受密码保护的 Excel 文件(.xlsx),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25994772/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com