读取密码保护的Excel文件格式(.xlsx)使用Java(Read Password protec

2019-10-21 01:25发布

我曾尝试下面的代码,

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);

它抛出一个错误编译错误: Cannot instantiate the type Decryptor

但最终这种方法会需要我来复制和创造新的工作簿中,我可以读取数据。

  1. 为什么我不能够实例解密?
  2. 是否有任何其他的方式比这一点,这样我可以简单地读取受保护的Excel文件的密码,而无需创建一个副本

注:我已经看过这个帖子的阅读Excel文件 ,但不帮助我的确切情况

Answer 1:

啊,我发现你的问题。 这是该行:

Decryptor d = new Decryptor(info);

由于在所示的Apache POI加密文档 ,该线必须

Decryptor d = Decryptor.getInstance(info);

你会得到很好的建议,以审查加密POI文档 ,并且确保你使用最新版本的Apache POI的(3.11 beta 2版本中写作的)

另外,是不是从一个InputStream打开文件建议,按照文件 ,因为它的速度较慢,更高的内存(一切都已经得到缓冲)。 相反,你的代码确实应该:

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读取加密的工作簿



文章来源: Read Password protected excel file(.xlsx) using Java