Apache POI锁定单元格,但允许列调整大小



我通过 Apache POI XSSF创建一个excel文件,然后用密码锁定工作表,以便用户无法更改前两行和前五列的值(我锁定表并允许其他细胞的编辑(。所有工作正常,唯一的问题是用户无法调整列大小,因此他既不能更改也不能调整列的大小以读取所有单元格值。即使板受保护,也可以允许列调整大小吗?这是我的配置

workbook = new XSSFWorkbook();
sheet = workbook.createSheet("Sheet1");
sheet.protectSheet("passwordExcel"); 
unlockedNumericStyle = workbook.createCellStyle(); 
unlockedNumericStyle.setLocked(false);
// Format cell for date
dateStyle = workbook.createCellStyle();
CreationHelper createHelper = workbook.getCreationHelper();
dateStyle.setDataFormat(createHelper.createDataFormat().getFormat("dd/mm/yyyy"));
sheet.autoSizeColumn(1);

我阅读了有关lockFormatCell()的信息,但我不明白它是否可以帮助我。谢谢

在保护工作表时能够调整列大小,您将需要设置xssfsheet.lockformatcolumns to false

完成示例:

import java.io.FileOutputStream;
import org.apache.poi.ss.usermodel.*;
import org.apache.poi.xssf.usermodel.*;
public class CreateExcelXSSFProtectedSheet {
 public static void main(String[] args) throws Exception {
  Workbook workbook = new XSSFWorkbook();
  CreationHelper createHelper = workbook.getCreationHelper();
  CellStyle unlockedNumericStyle = workbook.createCellStyle();
  unlockedNumericStyle.setDataFormat(createHelper.createDataFormat().getFormat("$#,##0.00_);[Red]($#,##0.00)"));
  unlockedNumericStyle.setLocked(false);
  CellStyle dateStyle = workbook.createCellStyle();
  dateStyle.setDataFormat(createHelper.createDataFormat().getFormat("dd/mm/yyyy"));
  Sheet sheet = workbook.createSheet();
  Row row = sheet.createRow(0);
  Cell cell = row.createCell(1);
  cell.setCellValue("some data");
  row = sheet.createRow(1);
  cell = row.createCell(1);
  cell.setCellValue(-123456789.0123456);
  cell.setCellStyle(unlockedNumericStyle);
  row = sheet.createRow(2);
  cell = row.createCell(1);
  cell.setCellValue(new java.util.Date());
  cell.setCellStyle(dateStyle);
  ((XSSFSheet)sheet).lockFormatColumns(false);
  sheet.protectSheet("passwordExcel"); 
 
  sheet.autoSizeColumn(1);
  FileOutputStream out = new FileOutputStream("CreateExcelXSSFProtectedSheet.xlsx");
  workbook.write(out);
  out.close();
  workbook.close();
 }
}

最新更新