2013-02-05 7 views
10

Ich verwende den Apache POI, um eine Excel-Datei (2007) zu generieren. Was ich will, ist das Blatt zu schützen, aber mit einigen Optionen aktiviert. Mit Optionen meine ich die Checkbox-Liste, wenn Sie versuchen, das Blatt in der Excel-Anwendung zu schützen (unter der Bezeichnung "Erlauben Sie allen Benutzern dieses Arbeitsblatts zu:"). Insbesondere möchte ich "Wählen Sie gesperrte/nicht gesperrte Zellen", "Format Spalte", "Sortieren" und "Autofilter zulassen" aktivieren. Vielen Dank! : DApache POI - Wie kann Blatt mit Optionen geschützt werden?

+0

i über 'sheet.getSettings denke nicht()' set() Methoden, können Sie nichts tun. – TheWhiteRabbit

+0

sheet.getSettings() ist von JExcel, nicht Apache POI, denke ich. – Jairo

Antwort

10

In Apache POI 3.9 können Sie XSSF Blattschutz verwenden, indem Sie Sperrfunktionen aktivieren. Auch Sie können einige Excel-Objekte zurücklassen, wie im Fall unten ich Excel-Objekt (d. h. Textfeld) gesperrt und Ruhe gesperrt sind.

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

} 
5

Sie können feststellen, dass Sie nicht auswählen können, welche Funktionen, es ist entweder alles oder nichts. Dies ist derzeit ein bekannter Fehler in Apache Poi. Quelle: https://issues.apache.org/bugzilla/show_bug.cgi?id=51483

Sie können dieses Problem beheben, indem Sie die folgende Problemumgehung verwenden:

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); 
+0

Ich verwende ein XSSFSheet-Objekt. Gibt es eine Möglichkeit, die Option Alle Filter löschen in Excel zu aktivieren, wenn mein Blatt geschützt ist. irgendwelche Vorschläge ? –