Apache POI默认锁定所有单元格.如何解锁所有单元格



如何使工作表中的所有单元格默认解锁?

这个片段创建一个所有单元格都锁定的工作表

SXSSFWorkbook wb = new SXSSFWorkbook();
Sheet sheet = wb.createSheet("Results");
Row row = sheet.createRow(rowCounter);
Cell cell = row.createCell(counter);
cell.setCellValue("test");

当试图打开excel文件时,此片段会导致一些损坏的数据

SXSSFWorkbook wb = new SXSSFWorkbook();
Sheet sheet = wb.createSheet("Results");
Row row = sheet.createRow(rowCounter);
Cell cell = row.createCell(counter);
CellStyle cellStyle = wb.createCellStyle();
cellStyle.setLocked(false);
cell.setCellStyle(cellStyle);
cell.setCellValue("test");

这个片段不会引起任何问题,但它也会解锁单元格。我可以修改所有单元格,但如果我点击"格式","锁定单元格"链接会突出显示。

SXSSFWorkbook wb = new SXSSFWorkbook();
Sheet sheet = wb.createSheet("Results");
Row row = sheet.createRow(rowCounter);
Cell cell = row.createCell(counter);
cell.setCellValue("test");
cell.getCellStyle().setLocked(false);

您的第一个片段不会使用POI 3.9生成带有锁定单元格的文档。

SXSSFWorkbook wb = new SXSSFWorkbook();
Sheet sheet = wb.createSheet("Results");
Row row = sheet.createRow(0);
Cell cell = row.createCell(0);
cell.setCellValue("test");
FileOutputStream fileOut = new FileOutputStream("/tmp/test.xlsx");
wb.write(fileOut);
fileOut.close();

如预期的那样,单元格在生成的工作簿中是可编辑的。

SXSSF是流式POI API。它针对将大量数据写入基于XML的电子表格进行了优化(普通的XSSF api将XML文档保存在内存中,并且在构建大型文档时可能会使用大量内存)。如果您不需要输出基于XML的大型文档,我建议您只使用XSSFapi,因为SXSSF有一些限制和gotcha,并且没有很好的文档记录。

另请参阅:

  • SXSSF文档
  • POI快速入门

最新更新