如何使用 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);'
});
无法在 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);