如何使用 C# 使 Excel 单元格只读

本文关键字:单元格 只读 Excel 何使用 | 更新日期: 2023-09-27 18:34:01

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

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

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

如何将单元格区域设置为只读?

当我对此范围使用验证时,我的单元格内容更改事件出现一些异常。

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

如何使用 C# 使 Excel 单元格只读

无法在 excel 中将单元格设为只读。

在 c# 代码中可以做的是,在变量或列表中定义一个"只读"单元格,订阅 SheetChange 事件,在 SheetChange 事件中,如果该单元格发生更改,只需撤消该更改即可。

私有列表只读单元格 = 新列表();

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