如何使一个Excel单元格ReadOnly使用C#?

Range range= (Range)this.workSheet.Cells[1,1]; range.AllowEdit = false; 

当我将AllowEdit属性设置为false时,编译错误将显示:

错误:属性或索引器'Microsoft.Office.Interop.Excel.Range.AllowEdit'不能被分配给 – 它是只读的

如何将单元格的范围设置为只读?

当我使用这个范围的validation时,我的CellContentChanged事件得到了一些exception。

这是在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);' }); 

在excel中没有办法使单元格只读。

你可以在你的c#代码中做的是,定义一个在variables或列表中将是“只读”的单元格,在SheetChange事件中订阅SheetChange事件,如果该单元格被更改,更改。

示例 private List readOnlyCells = new List();

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

更新

另一种select是使用数据validation:

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

使用它你将有更less的控制,单元格将不会接受任何input。

我认为这可以通过将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);