Search code examples
javaexcel-2007apache-poi

Apache POI - How to protect sheet with options?


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


Solution

  • 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();
    
    }