dho*_*orn 5 java excel apache-poi
我有一个受密码保护的Excel电子表格.我需要打开此电子表格并从中读取数据.我一直试图使用POI API无济于事.Java解决方案将是首选,但任何想法都会有所帮助.
编辑:是的,我有密码.该文件在excel中受密码保护; 必须输入密码才能查看电子表格.
Edit2:我无法使用POI用密码打开它,我正在寻找替代解决方案.
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);
Run Code Online (Sandbox Code Playgroud)
之后,HSSF应该能够打开您的文件.
对于XSSF,您需要以下内容:
POIFSFileSystem fs = new POIFSFileSystem(new FileInputStream("protect.xlsx"));
EncryptionInfo info = new EncryptionInfo(fs);
Decryptor d = Decryptor.getInstance(info);
d.verifyPassword(Decryptor.DEFAULT_PASSWORD);
XSSFWorkbook wb = new XSSFWorkbook(d.getDataStream(fs));
Run Code Online (Sandbox Code Playgroud)
有关详细信息,请参阅POI加密文档页面
您可以使用JExcelApi。
我已经有一段时间没有这样做了,所以我可能不会告诉你如何正确地做到这一点,但肯定有一种方法可以使用 JExcelApi 来做到这一点。尝试以下来源:
Workbook workbook = Workbook.getWorkbook(new File("/path/to/protected.xls"));
workbook.setProtected(false);
WritableWorkbook copy = Workbook.createWorkbook(new File("/path/to/unprotected.xls"), workbook);
WritableSheet[] sheets = copy.getSheets();
for (WritableSheet sheet : sheets){
sheet.getSettings().setProtected(false);
}
copy.write();
copy.close();
Run Code Online (Sandbox Code Playgroud)
当然,您需要导入必要的类并捕获必要的异常。
| 归档时间: |
|
| 查看次数: |
24415 次 |
| 最近记录: |