How can I access password protected Excel workbook in Java using POI api How can I access password protected Excel workbook in Java using POI api apache apache

How can I access password protected Excel workbook in Java using POI api


POI should be able to open both protected xls files (using org.apache.poi.hssf.record.crypt) and protected xlsx files (using org.apache.poi.poifs.crypt). Have you tried these?

If you're using HSSF (for a xls file), you need to set the password before opening the file. You do this with a call to:

 org.apache.poi.hssf.record.crypto.Biff8EncryptionKey.setCurrentUserPassword(password);

After that, HSSF should be able to open your file.

For XSSF, you want something like:

POIFSFileSystem fs = new POIFSFileSystem(new FileInputStream("protect.xlsx"));EncryptionInfo info = new EncryptionInfo(fs);Decryptor d = new Decryptor(info);d.verifyPassword(Decryptor.DEFAULT_PASSWORD);XSSFWorkbook wb = new XSSFWorkbook(d.getDataStream(fs));

.

Alternately, in newer versions of Apache POI, WorkbookFactory supports supplying the password when opening, so you can just do something like:

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

That will work for both HSSF and XSSF, picking the right one based on the format, and passing in the given password in the appropriate way for the format.


If the entire workbook is password protected (by going through the Excel menu File > Save As... > Tools > General Options... then supplying a password) then the file is encrypted and you cannot read from and write to the workbook through POI.

Excel Save As... General Options


CODE:

FileInputStream fileInput = new FileInputStream("2.xls");         BufferedInputStream bufferInput = new BufferedInputStream(fileInput);            POIFSFileSystem poiFileSystem = new POIFSFileSystem(bufferInput);            Biff8EncryptionKey.setCurrentUserPassword("test"); HSSFWorkbook workbook = new HSSFWorkbook(poiFileSystem, true); 

jars used:

  • commons-codec-1.5.jar
  • commons-logging-1.1.jar
  • dom4j-1.6.jar
  • jsr173_1.0_api.jar
  • junit-4.11.jar
  • log4j-1.2.13.jar
  • poi-3.10-FINAL-20140208.jar
  • poi-excelant-3.10-FINAL-20140208.jar
  • poi-ooxml-3.10-FINAL-20140208.jar
  • poi-ooxml-schemas-3.10-FINAL-20140208.jar
  • resolver.jar
  • xbean.jar
  • xbean_xpath.jar
  • xmlbeans-qname.jar
  • xmlpublic.jar