首页 > 解决方案 > 使用 VBScript 过滤 Word 文档

问题描述

我有一个非常大的 word 文档,大约 100 页,并且是自动生成的。问题是大多数时候我想过滤选项(只有某些部分和小节)。标题 1 是项目,标题 2 是图表,标题 3 是图表的组件。我一直在尝试使用 VBScripts 来选择我想要的标题 2 和 3,然后删除我不想要的任何标题中包含的所有内容。我一直在玩 VBScripts,但似乎无法获得标题列表。这就是我应该拉标题的子的样子。

Sub getHeadings()
    Set objSelection = objWord.Selection
    For Each p In objSelection.Paragraphs
        WScript.Echo p.Range.Text
    Next p
End Sub

我遇到的真正问题是找到将 VBScripts 与 Word 结合使用的良好文档。如果有人可以帮助我或为我指出好的文档的方向,那就太好了。

顺便一提。我不能在 VBA 中执行此操作,因为这个 Word 文档是由另一个程序自动生成的,我希望能够在命令行中执行一个快速命令并准备好文档而不是打开文档,找到宏,粘贴进去然后运行。最终目标是将此脚本与生成文档的脚本结合起来。

编辑:根据要求,我添加了一些我用来打开文档的脚本

Dim objWord
Dim path
path = "C:\path\to\doc\test.docx"
Set objWord = CreateObject("Word.Application")

openWordDoc(path)

Sub openWordDoc(filepath)
    objWord.Visible = True
    Set objDoc = objWord.Documents.Open(filepath)
    Set objSelection = objWord.Selection
end Sub

标签: vbscriptautomationms-word

解决方案


下面的 Word 宏允许您选择一个标题级别,然后通过文档查看该级别标题跨越的所有内容,选择保留或删除哪些内容。这比简单地循环遍历所有段落要有效得多。

Sub ReviewHeadings()
Dim RngHd As Range, h As Long, Rslt
h = CLng(InputBox("Input the Heading level (e.g. 1) to process", "Heading Content Review", 1))
If (h < 1) Or (h > 9) Then Exit Sub
With ActiveDocument.Range
  With .Find
    .ClearFormatting
    .Replacement.ClearFormatting
    .Text = ""
    .Style = "Heading " & h
    .Replacement.Text = ""
    .Forward = True
    .Wrap = wdFindStop
    .Format = True
    .MatchWildcards = False
    .Execute
  End With
  Do While .Find.Found
    Set RngHd = .Paragraphs(1).Range
    Set RngHd = RngHd.GoTo(What:=wdGoToBookmark, Name:="\HeadingLevel")
    RngHd.Select
    Rslt = MsgBox("Retain this portion?", vbYesNoCancel)
    If Rslt = vbCancel Then Exit Sub
    If Rslt = vbNo Then RngHd.Delete
    .Start = RngHd.End
    .Find.Execute
  Loop
End With
Set RngHd = Nothing
End Sub

您可以使用 VBscript 执行类似的操作,将命名常量替换为它们的等效数字。


推荐阅读