word自动化后期绑定替换书签返回TargetinvocationException'无法删除范围'

时间:2014-11-04 09:24:21

标签: c# bookmarks late-binding word-2010 word-automation

目前我正在处理包含多个书签的Word.dotx文件,这些书签正在被c#程序更改。

对于Rebranding项目,我需要添加几个新的书签字段,而我的前任代码确实引用了Office Word 2010中的Text Form Field Legacy Control。

我创建了一个新的文本表单字段,其字段设置书签指向TestBookmark1。我已经知道某个错误,文本表单字段的书签名称最多可包含20个字符。

当我运行测试代码时,现有的书签会在新书签崩溃时完美替换。我在此处收到的例外情况是“范围无法删除

用于替换书签的代码如下:

  public void ReplaceBookmark(string bookmarkName, string text)
  {
      try
      {
          var bookmarks = GetProperty("Bookmarks", _wordDoc); //worddoc is the Word.Document equivalent in late binding
          var exists = InvokeMember("Exists",
              bookmarks,
              new object[]
              {
                  bookmarkName
              }) != null && (bool)InvokeMember("Exists",
                  bookmarks,
                  new object[]
                  {
                      bookmarkName
                  });
          if (!exists)
              return;
          var bookmark = InvokeMember("Item",
              bookmarks,
              new object[]
              {
                  bookmarkName
              });

          var range = GetProperty("Range", bookmark);
          SetProperty("Text", range, text);

          InvokeMember("Add",
              bookmarks,
              new[]
              {
                  bookmarkName, range
              });
      }
      catch
      {
          CloseWord(false);
          throw;
      }
  }

SetProperty(“文字”,范围,文字)处抛出异常;

  private static void SetProperty(string propertyName, object instance, object value)
  {
      if (instance == null)
          return;
      var type = instance.GetType();
      type.InvokeMember(propertyName,
          BindingFlags.SetProperty,
          null,
          instance,
          new[]
          {
              value
          });
  }

当进入更深层时,它会落在type.InvokeMember函数上。

我已经看到了同样的解决方案Here,但是这个例子使用了我出于公司原因无法使用的早期绑定原则。

这给我留下了以下问题:

  • 我是否错误地添加了书签,或者我只是忘记了某些内容?
  • 为什么我会收到“范围无法删除例外”?
  • 当我发现这个特定错误时,是否有其他方法来替换书签?

提前致谢

1 个答案:

答案 0 :(得分:0)

我找到了,可能是另一个Office骗局......

添加新的文本表单字段时,您可以选择添加属性。在“字段设置”中,您可以设置书签。

然而,这并不能完成书签。

设置文本表单字段属性后,您仍需要转到

插入标签=>工具组=>书签=>选择正确的书签(标准正确突出显示),然后按添加。

这听起来很愚蠢,但我显然没有做最后的步骤。

招呼