如何使用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);