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);'
});
有没有办法让一个细胞只读在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);