Range range= (Range)this.workSheet.Cells[1,1];
range.AllowEdit = false;
当我将 AllowEdit
属性设置为false时,将显示编译错误:
错误:属性或索引器 无法将“Microsoft.Office.Interop.Excel.Range.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);'
});
答案 0 :(得分:3)
无法在excel中将单元格设为只读。
在c#代码中可以做的是,在变量或列表中定义一个“只读”的单元格,在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
<强>更新强>
另一种方法是使用数据验证:
changedCell.Validation.Add(Excel.XlDVType.xlValidateCustom, Type.Missing, Type.Missing, "\"\"");
使用它可以减少控制,单元格将不接受任何输入。
答案 1 :(得分:1)
我认为可以通过将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);