1

これが背景情報です。私はExcel2007.xlsmファイルに書き込むアプリを持っており、Visual Studio 2010とともに、C#とExcel 12.0相互運用オブジェクトライブラリを使用しています。セルの値と式を変更したり、フォントを設定したり、フォントスタイル、セルをロックするかどうかなどを設定します。最後に行う必要があるのは、シートの保護を設定して、ロックされたセルの選択を禁止することです。

一般的なシート保護のテストとして、このコードを呼び出そうとすると...

((Excel.Worksheet)excelApp.ThisWorkbook.Sheets[0]).Protect(Password: protectionPassword, AllowFormattingCells: false);

... Exception from HRESULT: 0x800A03ECCOM例外が処理されなかったことを示す例外が発生します。

また、相互運用保護オブジェクトは、上記のオプションを提供しませんが、レビュータブの下の[シートの保護]をクリックすると、そのオプションがExcelで使用可能になります。

では、私の質問です。C#でExcel相互運用機能を使用してAllowSelectLockedCellsをオフにするオプションを使用して、Excelで目的のシートを保護するにはどうすればよいですか?

4

1 に答える 1

5

あなたはおそらくそれが尋ねられてからこれを解決しましたが、解決策を望んでいる検索エンジンからこれに遭遇した人々(私など)の利益のために:

これを機能させるための3つのポイント:

  • _Application.ThisWorkbook実際には、Excelインスタンスで現在アクティブなブックではなく、マクロを含むブックオブジェクトを参照します。そのためにはが必要_Application.ActiveWorkbookです。
  • Excelワークシートのインデックスは0ではなく1から始まります。
  • ロックされたセル(探していたAllowSelectLockedCells)が選択されないようにするには、シートをロックする前に、まずEnableSelectionプロパティをに設定します。XlEnableSelection.xlUnlockedCells

したがって、以下は必要なことを実行します。

((Excel.Worksheet)excelApp.ActiveWorkbook.Sheets[1]).EnableSelection = Excel.XlEnableSelection.xlUnlockedCells;
((Excel.Worksheet)excelApp.ActiveWorkbook.Sheets[1]).Protect(Password: protectionPassword, AllowFormattingCells: false);
于 2012-05-06T06:27:17.793 に答える