Apache POI默认锁定所有单元格。如何让所有细胞解锁?

时间:2013-02-19 20:13:07

标签: java excel 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);

1 个答案:

答案 0 :(得分:1)

您的第一个代码段 使用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的文档,我建议只使用XSSF api,因为SXSSF有几个限制和缺陷,并且记录不完整。

另见: