java - Apache POI 默认情况下锁定所有单元格。如何让所有单元格解锁?

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

最佳答案

您的第一个代码段不会使用 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 有一些限制和陷阱,并且没有详细记录。

另请参阅:

关于java - Apache POI 默认情况下锁定所有单元格。如何让所有单元格解锁?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14966502/

相关文章:

java - 使用 Java 读取 Excel 工作表时出错

java - 如何从客户支持的角度在后台针对不同的用户组进行票证限制?

java - Apache POI 中的自定义颜色

java - 更改 hibernate 托管实体的包名称

java - 如何使用邮件合并将符号从 Excel 获取到 Word

excel - 为什么 cells(1,1) = 500 * 100 会导致溢出,而​​ 50000*100 不会?

javascript - 将 Excel 文件转换为 JSON : design of JSON code check

ms-word - 如何更改 Apache word poi (XWPF) 中的表方向?

java - 黑莓持久对象给出问题

java - 在 java 中输入错误后询问用户另一个提示