如何使用POI api访问Java中受密码保护的Excel工作簿

2022-09-04 07:42:07

我想读取和写入受密码保护的Excel文件。我如何使用Apache POI API做到这一点。


答案 1

POI应该能够打开受保护的xls文件(使用org.apache.poi.hssf.record.crypt)和受保护的xlsx文件(使用org.apache.poi.poifs.crypt)。你试过这些吗?

如果您使用的是 HSSF(对于 xls 文件),则需要在打开文件之前设置密码。您可以通过调用以下命令来执行此操作:

 org.apache.poi.hssf.record.crypto.Biff8EncryptionKey.setCurrentUserPassword(password);

之后,HSSF 应该能够打开您的文件。

对于 XSSF,您需要类似如下的内容:

POIFSFileSystem fs = new POIFSFileSystem(new FileInputStream("protect.xlsx"));
EncryptionInfo info = new EncryptionInfo(fs);
Decryptor d = new Decryptor(info);
d.verifyPassword(Decryptor.DEFAULT_PASSWORD);
XSSFWorkbook wb = new XSSFWorkbook(d.getDataStream(fs));

.

或者,在较新版本的Apache POI中,WorkbookFactory支持在打开时提供密码,因此您可以执行以下操作:

Workbook wb = WorkbookFactory.create(new File("protected.xls"), "password");

这将适用于HSSF和XSSF,根据格式选择正确的密码,并以适当的方式传入给定的格式密码。


答案 2

如果整个工作簿受密码保护(通过浏览 Excel 菜单“文件>另存为...”>工具>常规选项...“,然后提供密码),则文件已加密,您无法通过 POI 读取和写入工作簿。

Excel Save As... General Options


推荐