NPOIFSFileSystem fs = new NPOIFSFileSystem(new File("C://Users//RK5026051//Downloads//500_Lanes.xls"));
EncryptionInfo info = new EncryptionInfo(fs);
Decryptor d = Decryptor.getInstance(info);
if (d.verifyPassword("manh.com")) {
HSSFWorkbook wb = new HSSFWorkbook(d.getDataStream(fs));
} else {
System.out.println("wrong password");
}
// TODO Auto-generated method stub
}
错误 -
Exception in thread "main" java.io.FileNotFoundException: no such entry: "EncryptionInfo", had: [_VBA_PROJECT_CUR, SummaryInformation, DocumentSummaryInformation, Workbook]
at org.apache.poi.poifs.filesystem.DirectoryNode.getEntry(DirectoryNode.java:370)
at org.apache.poi.poifs.filesystem.DirectoryNode.createDocumentInputStream(DirectoryNode.java:177)
at org.apache.poi.poifs.crypt.EncryptionInfo.<init>(EncryptionInfo.java:51)
at org.apache.poi.poifs.crypt.EncryptionInfo.<init>(EncryptionInfo.java:47)
at auto.excel.main(excel.java:15)
我正在使用selenium从应用程序下载文件,我需要更新excel文件中的某些字段,然后再次上传。**
我知道我正在下载的excel文件的密码,现在我需要编写一个代码,以便更新特定的行和列,但我无法对该excel文件进行任何操作,我猜这是因为它的密码受保护。
我已经尝试了堆栈溢出的一些答案,但我没有工作。此外,我没有在互联网上获得有关此主题的许多材料。 这是我试过的示例代码
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
}
答案 0 :(得分:1)
首先,我知道这些日子并不流行,但你应该really really read the Apache POI documentation on reading protected files。从那以后,您会发现您正在尝试使用XLSX
解密方法来保护受保护的XLS
文件,这无疑令人失望!
但是,打开
时,还有更简单的方法 - WorkbookFactory can take the password of your spreadsheet所以,只需将代码更改为非常简单:
Workbook wb = WorkbookFactory.create(new File("protected.xls"), "password", true);
这将以只读模式打开工作簿,使用提供的密码进行读取,并自动识别所需类型