如何使Excel单元格只读使用C#?(How to make an excel cell ReadO

2019-09-17 05:23发布

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

Answer 1:

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

使用它,你将有较少的控制和细胞不能接受任何输入。



Answer 2:

我认为它可以通过设置来实现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);


文章来源: How to make an excel cell ReadOnly using C#?