Как сделать ячейку excel только для чтения с помощью C#?
Range range= (Range)this.workSheet.Cells[1,1];
range.AllowEdit = false;
когда я поставил AllowEdit
свойство false, ошибка компиляции покажет:
ошибка: свойство или индексатор 'Майкрософт.Офис.Взаимодействие.Превосходить.Диапазон.AllowEdit ' не может быть назначен -- только для чтения
как я могу установить диапазон ячеек только для чтения?
когда я использую проверку для этого диапазона, я получил некоторое исключение на моем событии CellContentChanged .
вот код, который находится в CellContentChanged:
var updater = new Action<StyleColorItem>(
item =>
{
var editedItem = _taskViewModel.TrackedItems.First(it => it.Id == item.Id);
// Above line I am getting the exception like "Sequence contains no matching element"
editedItem.Update(item);'
});
2 ответов
нет способа сделать ячейку только для чтения в excel.
что вы можете сделать в своем коде C#, это определить ячейку, которая будет "доступна только для чтения" в переменной или списке , подписаться на событие SheetChange, в событии SheetChange, если эта ячейка изменится, просто отмените это изменение.
пример частный список readOnlyCells = новый список ();
private void OnActiveSheetCellChange(object changedSheet, Excel.Range changedCell)
{
if (readOnlyCells.Contains(changedCell))
changedCell.Value = string.Empty;
//.... YOUR CODE
обновление
Другой альтернативой является использование данных Проверка:
changedCell.Validation.Add(Excel.XlDVType.xlValidateCustom, Type.Missing, Type.Missing, "\"\"");
используя его, вы будете иметь меньше контроля, и ячейка просто не будет принимать никаких входных данных.
Я думаю, что это можно сделать, установив Locked
свойство true и защита рабочего листа.
range.Locked = true;
this.workSheet.Protect(Type.Missing, Type.Missing,
true,
Type.Missing, Type.Missing, Type.Missing, Type.Missing,
Type.Missing, Type.Missing, Type.Missing, Type.Missing,
Type.Missing, Type.Missing, Type.Missing, Type.Missing,
Type.Missing);