Сделать колонку доступной только для чтения, используя apache poi - PullRequest
6 голосов
/ 14 декабря 2011

Я использую apache-poi для создания файла excel.Мне нужно сделать четвертый столбец доступным только для чтения, а оставшиеся 2 столбца будут доступны для редактирования пользователем.

Я использую XSSFCellStyle, чтобы добиться этого, но у меня это не работает.

Весь код:

Map<String, XSSFCellStyle> styles = new HashMap<String, XSSFCellStyle>();

XSSFCellStyle style5 = wb.createCellStyle();
XSSFFont headerFont = wb.createFont();
headerFont.setBold(true);
style5.setFillForegroundColor(IndexedColors.GREY_25_PERCENT.getIndex());
style5.setFillPattern(XSSFCellStyle.SOLID_FOREGROUND);
style5.setFont(headerFont);
style5.setLocked(true); // this line does not get executed.
styles.put("header", style5);

1 Ответ

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

Вы должны защитить весь лист и разблокировать ячейки, которые должны быть доступны для редактирования:

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();
...