Блокировка одного столбца в Excel с использованием Apache POI - PullRequest
15 голосов
/ 06 декабря 2011

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

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

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

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

Защита листа с помощью sheet.protectSheet ("");

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

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

Как мне выполнить вышеуказанное требование?

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

1 Ответ

22 голосов
/ 08 февраля 2012

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