使用VBScript筛选Word文档

使用VBScript筛选Word文档,vbscript,automation,ms-word,Vbscript,Automation,Ms Word,我有一个非常大的word文档,大约有100页,是自动生成的。问题是大多数时候我想过滤选项(只有某些部分和子部分)。标题1是项目,标题2是图表,标题3是图表的组成部分。我一直在尝试使用VBScripts来选择我想要的标题2s和3s,然后删除我不想要的标题中包含的所有内容。我一直在玩VBScript,似乎无法获得标题列表。这就是我的副标题应该是什么样子 Sub getHeadings() Set objSelection = objWord.Selection For Each p

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

Sub getHeadings()
    Set objSelection = objWord.Selection
    For Each p In objSelection.Paragraphs
        WScript.Echo p.Range.Text
    Next p
End Sub
我遇到的真正问题是找到与Word一起使用VBScript的好文档。如果有人能帮助我,或者为我指出好的文档开发方向,那就太好了

顺便说一下。我不能在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

下面的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
Sub-reviewWheadings()
变暗RngHd作为范围,h作为长度,Rslt
h=CLng(输入框(“输入要处理的标题级别(如1)”,“标题内容审查”,1))
如果(h<1)或(h>9),则退出Sub
使用ActiveDocument.Range
和…一起找
.ClearFormatting
.Replacement.ClearFormatting
.Text=“”
.Style=“Heading”&h
.Replacement.Text=“”
.Forward=True
.Wrap=wdFindStop
.Format=True
.MatchWildcards=False
.执行
以
找,找,找到
设置RngHd=.段落(1).范围
设置RngHd=RngHd.GoTo(内容:=wdGoToBookmark,名称:=“\HeadingLevel”)
RngHd。选择
Rslt=MsgBox(“保留此部分?”,vbYesNoCancel)
如果Rslt=vbCancel,则退出Sub
如果Rslt=vbNo,则RngHd.Delete
.Start=RngHd.End
.Find.Execute
环
以
设置RngHd=无
端接头

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

下面的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
Sub-reviewWheadings()
变暗RngHd作为范围,h作为长度,Rslt
h=CLng(输入框(“输入要处理的标题级别(如1)”,“标题内容审查”,1))
如果(h<1)或(h>9),则退出Sub
使用ActiveDocument.Range
和…一起找
.ClearFormatting
.Replacement.ClearFormatting
.Text=“”
.Style=“Heading”&h
.Replacement.Text=“”
.Forward=True
.Wrap=wdFindStop
.Format=True
.MatchWildcards=False
.执行
以
找,找,找到
设置RngHd=.段落(1).范围
设置RngHd=RngHd.GoTo(内容:=wdGoToBookmark,名称:=“\HeadingLevel”)
RngHd。选择
Rslt=MsgBox(“保留此部分?”,vbYesNoCancel)
如果Rslt=vbCancel,则退出Sub
如果Rslt=vbNo,则RngHd.Delete
.Start=RngHd.End
.Find.Execute
环
以
设置RngHd=无
端接头

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

Word的“查找”功能可以搜索格式(样式)。这可能是需要研究的……什么是
objWord
,您能告诉我们它是如何实例化的吗?您的代码中应该有一行
Set objWord=…
,否则您将在这一行
Set objSelection=objWord.Selection
说明对象变量或未设置块变量时出错。但是,由于您没有提供关于它如何不起作用的信息,我们只能假设这不是一个好问题。欢迎您回答这个问题,并提供更多信息,例如,它是如何不起作用的?为Word自动化添加一个.Using VBScript实际上意味着您正在通过Word公开的COM接口使用VBA。最好的方法可能是用VBA编写代码。Word的查找功能可以搜索格式(样式)。这可能是需要研究的……什么是
objWord
,您能告诉我们它是如何实例化的吗?您的代码中应该有一行
Set objWord=…
,否则您将在这一行
Set objSelection=objWord.Selection
说明对象变量或未设置块变量时出错。但是,由于您没有提供关于它如何不起作用的信息,我们只能假设这不是一个好问题。欢迎您回答这个问题,并提供更多信息,例如,它是如何不起作用的?为Word自动化添加一个.Using VBScript实际上意味着您正在通过Word公开的COM接口使用VBA。那么,最好的方法可能是将代码编写为VBA。除了替换命名常量之外,“执行类似操作”还需要做更多的工作,这段代码会在VBScript中出错,原因有几个您没有说明。除了替换命名常量之外,“执行类似操作”还需要做更多的工作,由于您尚未说明的几个原因,此代码将在VBScript中出错。