我正在使用Apache POI生成Excel文件(2007)。我想要保护工作表,但启用了一些选项。选项指的是当您尝试在Excel应用程序中保护工作表时的复选框列表(在标签“允许此工作表的所有用户:”下)。具体来说,我想要启用“选择锁定/未锁定的单元格”、“设置列格式”、“排序”和“允许自动筛选”。非常感谢!:D
epggiuax1#
在Apache POI 3.9中,您可以通过启用锁定功能来使用XSSF工作表保护。即使您可以留下一些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(); }
7eumitmz2#
你可能会遇到你不能选择哪些功能,要么全部,要么什么都没有。这是目前Apache Poi中的一个已知bug。来源: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);
u5rb5r593#
感谢其他人的回答,特别是来自@Patrigan的回答,下面的代码片段对我有用,使用Apache POI版本3.17。
sheet.enableLocking(); CTSheetProtection sheetProtection = sheet.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); sheet.protectSheet(password); workbook_car.lockStructure();
3条答案
按热度按时间epggiuax1#
在Apache POI 3.9中,您可以通过启用锁定功能来使用XSSF工作表保护。即使您可以留下一些Excel对象未锁定,如下面的情况,我留下了Excel对象(即文本框)未锁定,其余的都锁定。
7eumitmz2#
你可能会遇到你不能选择哪些功能,要么全部,要么什么都没有。这是目前Apache Poi中的一个已知bug。来源:https://issues.apache.org/bugzilla/show_bug.cgi?id=51483
您可以使用以下解决方法解决此问题:
u5rb5r593#
感谢其他人的回答,特别是来自@Patrigan的回答,下面的代码片段对我有用,使用Apache POI版本3.17。