2013-02-05 13 views
10

Bir Excel Dosyası (2007) oluşturmak için Apache POI kullanıyorum. İstediğim şey sayfayı korumak, ancak bazı seçenekler etkinleştirildi. Seçeneklere göre, sayfayı Excel uygulamasında korumayı denediğinizde onay kutusu listesini ("Bu çalışma sayfasındaki tüm kullanıcılara izin ver:" etiketinin altında). Özellikle, "Kilitli/kilitli hücreleri seç", "Sütunu Biçimlendir", "Sırala" ve "Otomatik Filtrelere İzin Ver" işlevlerini etkinleştirmek istiyorum. Çok teşekkür ederim! : DApache POI - Sayfalar nasıl korunur?

+0

, sen her şeyi yapabilir. – TheWhiteRabbit

+0

sheet.getSettings(), JExcel değil, Apache POI, bence. – Jairo

cevap

10

Apache POI 3.9'da, kilit işlevlerini etkinleştirerek XSSF Sheet korumasını kullanabilirsiniz. Hatta birkaç excel nesnesinin arkasına bırakabilirim. Eğer bu durumda excel nesnesini (i.e metin kutusu) açık bıraktım ve geri kalanlar kilitliydi.

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

Hangi özelliklerin seçilemediğini, bu ya hep ya hiç hiçbirini seçemeyebilirsiniz. Bu şu anda Apache Poi'de bilinen bir böcek. Kaynak: https://issues.apache.org/bugzilla/show_bug.cgi?id=51483

aşağıdaki geçici çözümü kullanarak bu düzeltebilirsiniz: i() `set() yöntemleri` sheet.getSettings ötesine sanmıyorum

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

Bir XSSFSheet nesnesi kullanıyorum. Sayfam korunurken sayfamdaki tüm filtreleri temizle seçeneğini etkinleştirmenin bir yolu var mı? baska öneri ? –