这是背景信息。我有一个应用程序写入excel 2007 .xlsm文件,我正在使用C#和Excel 12.0互操作对象库以及Visual Studio 2010.我能够更改单元格值和公式,设置字体和字体样式,将单元格设置为锁定或不锁定等。我需要做的最后一件事是设置工作表的保护以禁止选择锁定的单元格。
当我尝试调用此代码时,作为一般表单保护的测试......
((Excel.Worksheet)excelApp.ThisWorkbook.Sheets[0]).Protect(Password: protectionPassword, AllowFormattingCells: false);
...我得到异常Exception from HRESULT: 0x800A03EC
告诉我COM异常未处理。
此外,互操作保护对象没有给我上面提到的选项,虽然当我点击评论标签下的“保护表”时,excel中提供了该选项。
所以,现在我的问题是:如何使用C#中的Excel Interop关闭AllowSelectLockedCells选项来保护Excel中所需的工作表?
答案 0 :(得分:5)
你可能已经解决了这个问题,但是为了那些从搜索引擎发现这个问题的人(比如我)的利益希望找到解决方案:
要实现这一目标需要三点:
_Application.ThisWorkbook
实际上是指包含宏的工作簿对象,而不是Excel实例中当前活动的工作簿。为此,您需要_Application.ActiveWorkbook
。EnableSelection
属性设置为XlEnableSelection.xlUnlockedCells
,然后再锁定工作表。所以以下内容将满足您的需求:
((Excel.Worksheet)excelApp.ActiveWorkbook.Sheets[1]).EnableSelection = Excel.XlEnableSelection.xlUnlockedCells;
((Excel.Worksheet)excelApp.ActiveWorkbook.Sheets[1]).Protect(Password: protectionPassword, AllowFormattingCells: false);