Как сделать ячейку 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);