这是背景信息。我有一个写入 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 中所需的工作表?
请您参考如下方法:
你可能已经解决了这个问题,但是为了那些从搜索引擎中偶然发现这个问题并希望得到解决方案的人(比如我)的利益:
实现此功能的三点:
_Application.ThisWorkbook实际上是指包含宏的工作簿对象,而不是 Excel 实例中当前事件的工作簿。为此,您需要_Application.ActiveWorkbook。- Excel 工作表索引从 1 开始,而不是 0。
- 为防止锁定的单元格被选中(您要查找的 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);
