Apache POI - Как защитить лист с помощью опций?

Я использую POI Apache для создания файла Excel (2007). Я хочу защитить лист, но с некоторыми параметрами включен. По вариантам я имею в виду список флажков при попытке защитить лист в приложении Excel (под меткой "Разрешить всем пользователям этой рабочей таблицы:" ). В частности, я хочу включить "Выбрать заблокированные/разблокированные ячейки", "Формат столбца", "Сортировка" и "Разрешить автофильтр". Большое спасибо!: D

Ответ 1

В Apache POI 3.9 вы можете использовать Защита XSSF Sheet путем включения функций блокировки. даже вы можете оставить несколько объектов excel, разблокированных, как в случае ниже, я оставил объект excel (например, текстовое поле) и заблокирован.

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

}

Ответ 2

Вы можете столкнуться с тем, что вы не можете выбрать какие функции, это либо все, либо ничего. В настоящее время это известная ошибка в Apache Poi. Источник: https://issues.apache.org/bugzilla/show_bug.cgi?id=51483

Вы можете исправить это, используя следующее обходное решение:

  xssfSheet.enableLocking();
  CTSheetProtection sheetProtection = xssfSheet.getCTWorksheet().getSheetProtection();
  sheetProtection.setSelectLockedCells(true); 
  sheetProtection.setSelectUnlockedCells(false); 
  sheetProtection.setFormatCells(true); 
  sheetProtection.setFormatColumns(true); 
  sheetProtection.setFormatRows(true); 
  sheetProtection.setInsertColumns(true); 
  sheetProtection.setInsertRows(true); 
  sheetProtection.setInsertHyperlinks(true); 
  sheetProtection.setDeleteColumns(true); 
  sheetProtection.setDeleteRows(true); 
  sheetProtection.setSort(false); 
  sheetProtection.setAutoFilter(false); 
  sheetProtection.setPivotTables(true); 
  sheetProtection.setObjects(true); 
  sheetProtection.setScenarios(true);