代码之家  ›  专栏  ›  技术社区  ›  Mike Webb

如何在带有C和Interop的Excel中设置锁定单元格保护选项?

  •  1
  • Mike Webb  · 技术社区  · 14 年前

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

    当我试图调用此代码时,作为一般板材保护的测试…

    ((Excel.Worksheet)excelApp.ThisWorkbook.Sheets[0]).Protect(Password: protectionPassword, AllowFormattingCells: false);
    

    …我得到例外 Exception from HRESULT: 0x800A03EC 告诉我COM异常未处理。

    此外,interop保护对象没有提供我上面提到的选项,尽管当我单击“审阅”选项卡下的“保护工作表”时,该选项在Excel中可用。

    所以,现在我的问题是:如何在Excel中保护所需的工作表,并使用C中的Excel Interop关闭allowSelectlockedCells选项?

    1 回复  |  直到 12 年前
        1
  •  5
  •   Sid Holland    12 年前

    你可能已经解决了这个问题,因为有人问你,但为了那些(像我)从搜索引擎中偶然发现这个问题,希望找到一个解决方案:

    这项工作需要三点:

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

    因此,以下内容将满足您的需要:

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