I'm using the Apache POI to generate an Excel File (2007). What I want is to protect the sheet, but with some options enabled. By options I mean the check box list when you try to protect the sheet in the Excel application (under the label "Allow all users of this worksheet to:"). Specifically, I want to enable "Select locked/unlocked cells", "Format Column", "Sort", and "Allow Autofilter". Thank you very much! :D
In Apache POI 3.9 you can use XSSF Sheet protection by enabling lock functions. even you can leave behind few excel objects unlocked as in case below I left out excel object (i.e text box) unlocked and rest are locked.
private static void lockAll(Sheet s, XSSFWorkbook workbookx){
String password= "abcd";
byte[] pwdBytes = null;
try {
pwdBytes = Hex.decodeHex(password.toCharArray());
} catch (DecoderException e) {
e.printStackTrace(); //To change body of catch statement use File | Settings | File Templates.
}
XSSFSheet sheet = ((XSSFSheet)s);
removePivot(s,workbookx);
sheet.lockDeleteColumns();
sheet.lockDeleteRows();
sheet.lockFormatCells();
sheet.lockFormatColumns();
sheet.lockFormatRows();
sheet.lockInsertColumns();
sheet.lockInsertRows();
sheet.getCTWorksheet().getSheetProtection().setPassword(pwdBytes);
for(byte pwdChar :pwdBytes){
System.out.println(">>> Sheet protected with '" + pwdChar + "'");
}
sheet.enableLocking();
workbookx.lockStructure();
}