在不丢失格式和活动对象的情况下替换部分 Word 页脚文本

Replace part of Word footer text without losing formatting and active objects

我需要在 Word 文档中维护标准页脚。页脚包含 doc id 和版本,可以更改,所以我必须不仅可以插入这个标准页脚,还可以更新它。

我只需要识别页脚的标准字符串部分并进行更新。字符串看起来像 <<Libray:DocId:vX>>(尖括号有助于匹配标准页脚的开头和结尾)。

一个问题是单独的括号不足以可靠地识别标​​准字符串,所以我正在做一个 RegEx ("<<[A-Za-z0-9_-]+:\d+v\d+>>") 匹配和替换来实现更新,但它似乎修改了文本 属性 清除所有格式和活动内容。

如果我不能在文本 属性 w/o 上使用 RegEx.Replace 丢失格式,是否有另一种方法来标记和更新标准字符串?

If oRegEx.Test(strFooter) Then
        ' Set the footer for the active document
        With ActiveDocument.Sections(1).Footers(wdHeaderFooterPrimary).Range
            .Style = wdStyleFooter
            .Font.Size = 8
            .Text = oRegEx.Replace(strFooter, strTextString) 'this wipes out page numbering and formatting
        End With
    Else
        With ActiveDocument.Sections(1).Footers(wdHeaderFooterPrimary).Range
            .Style = wdStyleFooter
            .Font.Size = 8
            .InsertAfter strJoiner & strTextString 'this preserves formatting and active content
        End With
    End If

您 运行 遇到的问题是 oRegEx.Replace 仅适用于文本内容。它不知道也不能保留 strFooter 中可能存在的任何格式。第一个代码块实质上是用 RegEx 的结果替换页脚的全部内容。

另一方面,InsertAfter 保留原始 Range 的内容不变。还有其他类似的方法 - 哪种方法合适取决于您想要做什么。

由于您没有详细说明使用 RegEx 的原因,尽管您提到了 "find",但很难提供额外的有用信息。 Word 确实有自己的 Find/Replace 功能,作为 Range 对象的 属性。 Word的Find支持通配符,类似于RegEx

编辑:感谢您提供更多信息。在 Word 中,切换到 header/footer 视图。按 Ctrl+F 以显示查找功能。如果这会打开一个任务窗格,请单击下拉列表右侧的箭头并选择 "Advanced find" 以获取完整的对话框。单击 "Replace" 选项卡。

激活 "wildcards" 复选框。在 "Find" 框中输入类似于以下内容的搜索代码,但将有效文本替换为您正在测试的文档:(\<\<)Library:DocId:vs#(>>)

在替换框中:\1Abc:efg:vsn2

括号中的Find定义了"expressions"可以在Replace中引用,这样就可以保留这个内容。上面的结果应该是<>。

完成此操作后,记录在宏中执行 Find/Replace 步骤。这将为您提供在代码中使用的语法。

代码的额外提示:如果整个页脚应该有不同的字体大小,您应该更改页脚样式定义,而不是将其添加为直接格式。