使用Apache POI在Excel中锁定单个列

19

我想创建一个Excel表格,其中只有一列是锁定的(只读),其余列都是可编辑的。

我使用了以下方法,但似乎并不起作用:

创建两个单元格样式,一个设置setLocked(true),另一个设置setLocked(false)。

然后将需要锁定的列中的所有单元格应用锁定样式,将其他单元格应用解锁样式。

使用sheet.protectSheet("")保护表格。

但是当我在open office中打开创建的Excel时,我注意到所有单元格都被锁定了!

它们都无法编辑。

如何满足上述要求?

注:我不能使用数据验证方法。


https://dev59.com/Q2oy5IYBdhLWcg3wguWS - 2787184
1个回答

32

如果你反过来做就能成功。保护整个工作表,并为应该可编辑的单元格调用setLocked(false)

String file = "c:\\poitest.xlsx";
FileOutputStream outputStream = new FileOutputStream(file);
Workbook wb = new XSSFWorkbook();

CellStyle unlockedCellStyle = wb.createCellStyle();
unlockedCellStyle.setLocked(false);

Sheet sheet = wb.createSheet();
sheet.protectSheet("password");
Row row = sheet.createRow(0);
Cell cell = row.createCell(0);
cell.setCellValue("TEST");
cell.setCellStyle(unlockedCellStyle);

wb.write(outputStream);
outputStream.close();

4
为了更清晰,整个工作簿都被锁定,包括本应该解锁的单元格。 - Bobo

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接