Вопрос по c#, excel – Как сделать ячейку Excel доступной только для C #?

7
<code>Range range= (Range)this.workSheet.Cells[1,1];
range.AllowEdit = false;
</code>

Когда я установилAllowEdit свойство false, ошибка компиляции покажет:

Error: Property or indexer 'Microsoft.Office.Interop.Excel.Range.AllowEdit' cannot be assigned to -- it is read only

Как я могу установить диапазон ячеек только для чтения?

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

Вот код, который находится в CellContentChanged:

<code>   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);'
           });
</code>
Ячейка Excel может быть установлена вread only только вы устанавливаете это свойствоLocked=True а затем установитеWorkSheet=Protected, Я не знаю, легко ли это сделать с помощью кода C #, но вы можете попробовать это. chaliasos

Ваш Ответ

2   ответа
3

Что вы можете сделать в своем коде на c #, так это определить ячейку, которая будет «доступна только для чтения». в переменной или списке подпишитесь на событие SheetChange, в событии SheetChange, если эта ячейка изменилась, просто отмените это изменение.

Example     приватный список readOnlyCells = new List ();

private void OnActiveSheetCellChange(object changedSheet, Excel.Range changedCell)
{
  if (readOnlyCells.Contains(changedCell))
      changedCell.Value = string.Empty;
      //.... YOUR CODE

Update

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

changedCell.Validation.Add(Excel.XlDVType.xlValidateCustom, Type.Missing, Type.Missing, "\"\"");

Используя его, вы будете иметь меньше контроля, и ячейка просто не примет никакого ввода.

Я использовал код ur в своем приложении. Он ограничивает редактирование значения, но его высказывание в виде предупреждения напоминает «Некоторые пользователи ограничивают это значение». и после того, как я отменил это окно с предупреждением, у меня возникли проблемы в моем событии CellContentChanged. Как я могу решить эту проблему сейчас? SuryaKavitha
попробуйте добавить это с помощью директивы, используя Excel = Microsoft.Office.Interop.Excel;
В моем коде говорится, что "XlDVType" не существует в моем пространстве имен SuryaKavitha
вам придется самостоятельно разбираться с логикой :)
Ну, во-первых, я предлагаю вам использовать первый метод, который я предложил. И во-вторых, определите «некоторые проблемы».
1

Locked свойство к истине и защита листа.

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);
мы можем дать первый Worksheet.Protect (...) и второе мы можем дать Range.locked = true? SuryaKavitha

Похожие вопросы