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

Mik*_*ebb 1 c# excel interop protection

这是背景信息.我有一个应用程序写入excel 2007 .xlsm文件,我正在使用C#和Excel 12.0互操作对象库以及Visual Studio 2010.我能够更改单元格值和公式,设置字体和字体样式,将单元格设置为锁定或不锁定等.我需要做的最后一件事是设置工作表的保护以禁止选择锁定的单元格.

当我尝试调用此代码时,作为一般表单保护的测试...

((Excel.Worksheet)excelApp.ThisWorkbook.Sheets[0]).Protect(Password: protectionPassword, AllowFormattingCells: false);
Run Code Online (Sandbox Code Playgroud)

...我得到异常__CODE__告诉我COM异常未处理.

此外,互操作保护对象不提供我上面提到的选项,虽然当我单击审阅选项卡下的"保护工作表"时,Excel中可以使用该选项.

那么,现在我的问题是:如何使用C#中的Excel Interop关闭AllowSelectLockedCells选项来保护Excel中所需的工作表?

Sid*_*and 5

你可能已经解决过这个问题了,但是为了那些(例如我)从搜索引擎发现这个想要解决方案的人的利益:

要实现这一目标需要三点:

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

所以以下内容将满足您的需求:

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