2013-08-23 200 views
0

我想讀取Excel數據表,我能夠獲取數據並使用HSSFWorkbook一切正常,我能夠獲取數據。使用Apache POI獲取excel工作簿密碼

我已經爲工作簿設置了一個密碼,在excel表Protect Workbook中手動設置爲「ABCXYZ」,同時打開excel文件,它會問我密碼,並且只有在密碼正確後才允許我寫入或讀取excel文件。

我的問題是如何在java程序中獲取此密碼「ABCXYZ」。

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

回答

1
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) { 



    } 
+0

只有一個模板文檔(Excel),所以對於那個文檔我設置了一個密碼,我爲該文檔設置了一個密碼。所以如果其他文件上傳,我應該使用密碼進行驗證。只有當我可以獲取該模板文檔的密碼時纔有可能。 – Venkat

2

據我所知,您可以使用:

(在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)); 

希望它幫助!

+0

[關於此的官方文檔在這裏](http://poi.apache.org/encryption.html)並同意你寫的內容 – Gagravarr

+0

@razcor即使我使用Biff8EncryptionKey來設置密碼,並使用它getCurrentUserPassword()可以檢索您設置的密碼。這不是我的問題,我在Excel工作表本身設置了密碼。我需要在java中獲得該密碼。 – Venkat

+0

@Gagravarr我已經設置了Excel文檔的密碼。我需要將該密碼提供給Java代碼。 – Venkat

相關問題