1. 设置单元格无法编辑
// 单元格样式锁定 不可编辑CellStyle lockStyle = workbook.createCellStyle();lockStyle.setLocked(true);// 单元格样式不锁定 CellStyle unlockStyle = workbook.createCellStyle();lockStyle.setLocked(false);// 创建行Row row = sheet.createRow(rownum); // 创建一个单元格Cell cell = row.createCell(columnnum);// 单元格设置为不可编辑cell.setCellStyle(lockStyle);// 单元格设置为可编辑cell.setCellStyle(unlockStyle);// 只有开启保护后,锁定样式才会生效,然后希望单元格依然可以编辑的话,必须设置为unlockStylesheet.protectSheet("123456");
2. 工作表开启后,筛选过滤无法使用
// 行A1, 列A1的开启刷选CellRangeAddress c = CellRangeAddress.valueOf("A1:A1");sheet.setAutoFilter(c);// 高版本的POI 锁定的筛选关闭sheet.lockAutoFilter(false);// 低版本的POI 没有 lockAutoFilter(Boolean var) 方法, 使用以下方式CTWorksheet ctWorksheet = ((XSSFSheet) this.sheet).getCTWorksheet();if (ctWorksheet.getSheetProtection() == null) {ctWorksheet.setSheetProtection(org.openxmlformats.schemas.spreadsheetml.x.main.CTSheetProtection.Factory.newInstance());}// 设置保护的工作表自动过滤锁定关闭ctWorksheet.getSheetProtection().setAutoFilter(false); ctWorksheet.getSheetProtection().setFormatCells(false);ctWorksheet.getSheetProtection().setFormatColumns(false);ctWorksheet.getSheetProtection().setFormatRows(false);
3. 冻结行列无法移动
sheet.createFreezePane(7, 2, 0, 0);// createFreezePane(int colSplit, int rowSplit, int leftmostColumn, int topRow)// 方式参数解释// colSplit: 冻结列数// rowSplit: 冻结行数// leftmostColumn: 冻结开始列// topRow:冻结开始行