如何使用C#和Interop在Excel中设置locking的单元格保护选项?

这是背景信息。 我有一个应用程序写入Excel 2007的.xlsm文件,我正在使用C#和Excel 12.0互操作对象库来做到这一点,与Visual Studio 2010.我能够改变单元格的值和公式,设置字体和字体样式,设置单元格是否locking等等。我需要做的最后一件事就是设置工作表的保护,禁止selectlocking的单元格。

当我尝试称这个代码,作为一般的表保护testing…

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

…我得到Exception from HRESULT: 0x800A03EC告诉我一个COMexception未处理。

此外,互操作保护对象不给我我上面提到的选项,虽然该选项在Excel中可用,当我点击“审查”选项卡下的“保护工作表”。

所以,现在我的问题:我如何保护在Excel中使用Excel中的Interop在closures选项AllowSelectLockedCell选项所需的工作表?

你可能已经解决了这个问题,但是为了那些(如我)谁从search引擎希望寻求解决scheme绊倒这样的利益:

三点来得到这个工作:

  • _Application.ThisWorkbook实际上是指包含macros的工作簿对象,而不是Excel实例中的当前活动工作簿。 为此你需要_Application.ActiveWorkbook
  • Excel工作表索引从1开始,而不是0。
  • 为了防止被locking的单元格被选中(AllowSelectLockedCells您正在寻找)您首先将EnableSelection属性设置为XlEnableSelection.xlUnlockedCells之前locking工作表。

所以下面将做你所需要的:

 ((Excel.Worksheet)excelApp.ActiveWorkbook.Sheets[1]).EnableSelection = Excel.XlEnableSelection.xlUnlockedCells; ((Excel.Worksheet)excelApp.ActiveWorkbook.Sheets[1]).Protect(Password: protectionPassword, AllowFormattingCells: false);