1

这是背景信息。我有一个写入 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 互操作关闭 AllowSelectLockedCells 选项来保护 Excel 中所需的工作表?

4

1 回答 1

5

你可能已经解决了这个问题,但是为了那些从搜索引擎偶然发现这个问题的人(比如我)的利益,希望得到一个解决方案:

三点让这个工作:

  • _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);
于 2012-05-06T06:27:17.793 回答