"您不能编辑此选项,因为它受到保护." 但仅限Office 2013以来?

haw*_*bsl 10 .net office-interop word-2013

几年来,我们已经在我们的应用程序中快速运行了这几行代码(以及Office,2003,2007和2010等多个版本).目的是在Word文档中执行一种邮件合并,用数据库中的名称,地址等替换字段占位符:

    Dim w As Word.Application
    Dim d As Microsoft.Office.Interop.Word.Document = Nothing
Run Code Online (Sandbox Code Playgroud)

...

    Dim f As Microsoft.Office.Interop.Word.Field
    For Each f In d.Fields
        f.Select()
        If fieldName = w.Selection.Text Then
            f.Result.Text = value
        End If
    Next
Run Code Online (Sandbox Code Playgroud)

但是,运行Office 2013的用户在该行上报告此错误f.Result.Text = value:

System.Runtime.InteropServices.COMException(0x800A17EC):您不能编辑此选择,因为它受到保护.

因此,这仅在用户运行Office 2013时才会发生,并且此错误的联机帮助很少.

文档的任何部分都不受保护,用户可以直接在Word中编辑文档而不会出现任何问题.

haw*_*bsl 20

无奈之下,甚至在博客文章和远离此特定错误的讨论中搜索答案,似乎Office 2013中的更改是对ReadingLayout的默认处理.

引入该线w.ActiveWindow.View.ReadingLayout = False似乎已经解决了我们的问题.