Блокировать один столбец в Excel с помощью Apache POI

Я хочу создать Excel, в котором заблокирован только определенный столбец (только для чтения), а остальные доступны для редактирования,

Я использую следующий подход, но это не работает.

Создайте два CellStyles, один с setLocked (true) и другой с setLocked (false).

Затем примените заблокированный стиль для всех ячеек в столбце, который необходимо заблокировать, и разблокированный стиль для всех остальных ячеек.

Защитите лист, используя sheet.protectSheet("");

Но когда я открываю созданный Excel в открытом офисе, я замечаю, что все ячейки заблокированы!

Ни одно из них не редактируется.

Как я могу достичь вышеуказанного требования?

P.S: Я не могу использовать подход проверки данных.

Ответы

Ответ 1

Если вы делаете наоборот, это работает. Защитите весь лист и вызовите 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();