使用Apache POI获取Excel工作簿密码

我正在尝试读取Excel表格中的数据,我能够获取数据并使用HSSFWorkbook读取它。一切正常,我能够获取数据。

我已经为工作簿设置了一个密码,在excel表Protect Workbook簿中手动设置为“ABCXYZ”,同时打开excel文件,它会问我密码,只有密码正确后,才允许我写入或读取excel文件。

我的问题是如何在Java程序中获得这个密码“ABCXYZ”。

 HSSFWorkbook wb = new HSSFWorkbook(inputStream); wb.isWriteProtected();--> This returns false. 

据我所知,你可以使用:

(在Excel 2003中)

 POIFSFileSystem pfs = new POIFSFileSystem(new FileInputStream("yourexcelfile.xls")); Biff8EncryptionKey.setCurrentUserPassword("ABCXYZ"); HSSFWorkbook wb = new HSSFWorkbook(pfs); 

(在Excel 2007中)

 POIFSFileSystem pfs = newPOIFSFileSystem(POIDataSamples.getPOIFSInstance().openResourceAsStream("yourexcelfile.xlsx")); EncryptionInfo encInfo = new EncryptionInfo(pfs); Decryptor decryptor = new Decryptor(encInfo); decryptor.verifyPassword("ABCXYZ"); XSSFWorkbook wb = new XSSFWorkbook(decryptor.getDataStream(pfs)); 

希望能帮助到你!

  try { FileInputStream fileInput = new FileInputStream("sample.xls"); BufferedInputStream bufferInput = new BufferedInputStream(fileInput); POIFSFileSystem poiFileSystem = new POIFSFileSystem(bufferInput); Biff8EncryptionKey.setCurrentUserPassword("password"); HSSFWorkbook workbook = new HSSFWorkbook(poiFileSystem, true); HSSFSheet sheet = workbook.getSheetAt(0); HSSFRow row = sheet.createRow(0); Cell cell = row.createCell(0); cell.setCellValue("Hello World"); FileOutputStream fileOut = new FileOutputStream(fname); workbook.writeProtectWorkbook(Biff8EncryptionKey.getCurrentUserPassword(), ""); workbook.write(fileOut); } catch (Exception ex) { }