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

2 に答える 2

4

Excelでセルを読み取り専用にする方法はありません。

C#コードでできることは、変数またはリストで「読み取り専用」になるセルを定義し、SheetChangeイベントをサブスクライブし、SheetChangeイベントで、そのセルが変更された場合は、それを元に戻すだけです。変化する。

プライベートリストの例 readOnlyCells=new List();

private void OnActiveSheetCellChange(object changedSheet, Excel.Range changedCell)
{
  if (readOnlyCells.Contains(changedCell))
      changedCell.Value = string.Empty;
      //.... YOUR CODE

アップデート

もう1つの方法は、データ検証を使用することです。

changedCell.Validation.Add(Excel.XlDVType.xlValidateCustom, Type.Missing, Type.Missing, "\"\"");

これを使用すると、制御が弱くなり、セルは入力を受け入れなくなります。

于 2012-05-14T12:10:40.130 に答える
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);
于 2012-05-14T13:03:34.757 に答える