密码保护的Excel文件

dho*_*orn 5 java excel apache-poi

我有一个受密码保护的Excel电子表格.我需要打开此电子表格并从中读取数据.我一直试图使用POI API无济于事.Java解决方案将是首选,但任何想法都会有所帮助.

编辑:是的,我有密码.该文件在excel中受密码保护; 必须输入密码才能查看电子表格.

Edit2:我无法使用POI用密码打开它,我正在寻找替代解决方案.

Gag*_*arr 7

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加密文档页面


Kev*_*ell 0

您可以使用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)

当然,您需要导入必要的类并捕获必要的异常。