2013-02-05 29 views
10

Tôi đang sử dụng Apache POI để tạo tệp Excel (2007). Những gì tôi muốn là để bảo vệ tờ, nhưng với một số tùy chọn được kích hoạt. Theo tùy chọn, tôi có nghĩa là danh sách hộp kiểm khi bạn cố gắng bảo vệ trang tính trong ứng dụng Excel (trong nhãn "Cho phép tất cả người dùng của trang tính này đến:"). Cụ thể, tôi muốn bật "Chọn các ô đã khóa/mở khóa", "Định dạng cột", "Sắp xếp" và "Cho phép tự động lọc". Cảm ơn nhiều! : DApache POI - Cách bảo vệ trang tính bằng các tùy chọn?

+0

tôi không nghĩ xa hơn 'sheet.getSettings() 'set() phương pháp, bạn có thể làm bất cứ điều gì. – TheWhiteRabbit

+0

sheet.getSettings() là từ JExcel, không phải Apache POI, tôi nghĩ vậy. – Jairo

Trả lời

10

Trong Apache POI 3.9 bạn có thể sử dụng Bảo vệ trang tính XSSF bằng cách bật chức năng khóa. thậm chí bạn có thể để lại vài đối tượng excel được mở khóa như trong trường hợp bên dưới, tôi đã thoát khỏi đối tượng excel (tức là hộp văn bản) được mở khóa và phần còn lại bị khóa.

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

Bạn có thể gặp phải rằng bạn không thể chọn tính năng nào, đó là tất cả hoặc không có gì. Đây là lỗi hiện tại trong Apache Poi. Nguồn: https://issues.apache.org/bugzilla/show_bug.cgi?id=51483

Bạn có thể khắc phục điều này bằng cách sử dụng các cách giải quyết như sau:

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

Im bằng cách sử dụng một đối tượng XSSFSheet.Is có một cách để cho phép xóa tất cả các tùy chọn bộ lọc trong excel với tờ của tôi được bảo vệ.? bất kỳ đề xuất ? –