2010-07-19 5 views
2

Есть ли способ заблокировать определенные ячейки от редактирования пользователем? Я попытался следующие:Блокировка ячеек в созданном JXL документе Excel

WritableCellFormat cf = new WritableCellFormat(); 
cf.setLocked(true); 
sheet.addCell(new Number(col, row, value, cf)); 

Однако это не оказывает никакого влияния на итоговую таблицу, т.е. содержимое ячейки все еще может быть изменен, если файл открыт в Excel.

ответ

4

Вы должны «активировать» защиту для каждого листа. Я не понимаю, как именно это должно быть сделано. Метод, который я нашел, -

sheet.setProtected(true); 

, но, очевидно, этот метод больше не рекомендуется. Поэтому, вероятно, вы должны попытаться найти более новую.

Редактировать: извините, но, ошибка. Это блокирует каждую ячейку листа.

Редактировать 2: Это работает для меня, если вы заблокируете лист энтузиазма, а затем откройте редактируемые ячейки.

sheet.getSettings().setProtected(true); 
WritableCellFormat unlocked = new WritableCellFormat(); 
unlocked.setLocked(false); 
Label l = new Label(0, 0, "", unlocked); 
sheet.addCell(l); 
+1

Спасибо, это работает! (Хотя его немного неудобно явно определять разблокированные ячейки, поскольку у меня обычно есть только одна или две ячейки, которые я хочу заблокировать) – Janne

2

Вот общие шаги для защиты клетки без использования устаревших методов в accepted answer
1. Создайте объект WritableCellFormat и набор заперт к ложным
2. Когда вы добавляете ячейку, которую вы хотите разблокировать, включить WritableCellFormat в вызове метода addCell (...)
3. Позвонить getSettings на листе, чтобы получить объект SheetSettings и вызвать setProtected (true), чтобы защитить лист и по расширению защищенные ячейки, которые по умолчанию отличаются это все ячейки.

WritableCellFormat cellFormat = new WritableCellFormat(); 
cellFormat.setLocked(false) 

WritableSheet sheet = Worksheet.createSheet(); 

//Create a cell that is protected and a cell that is not protected 
sheet.addCell(new Label(col1, row, "My Locked Cell"); 
sheet.addCell(new Label(col2, row, "My Unlocked Cell", cellFormat); 

//Protect the sheet so that locked cells are locked and unlocked cells are unlocked 
sheet.getSettings().setProtected(true); 
Смежные вопросы