我们可以使用java更新密码保护excel表的行和列吗?

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 } 

首先,我知道这些日子并不新潮,但是您真的应该阅读关于阅读受保护文件的Apache POI文档 。 从那里,你会看到你正在尝试使用XLSX解密方法来保护XLS文件,这不会令人吃惊!

但是,还有更简单的方法 – 打开时, WorkbookFactory可以获取电子表格的密码

所以,只需将代码更改为非常简单:

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

这将以只读模式打开工作簿,使用提供的密码读取,并自动识别所需的types