在MS Word中搜索标题

时间:2013-06-28 20:49:13

标签: python regex python-2.7 ms-word pywin32

我正在搜索单词文档中的标题和自动编号,并将它们分配给元组。

(Heading Style, 1.1, text)

目前我正在使用for循环传递文档中的每个Paragraph对象并进行搜索。

   for x in xrange(1, doc.Paragraphs.Count+1):#for loop to print through paragraphs
    oText = doc.Paragraphs(x)
    if not oText.Range.Tables.Count >0 :
        results = re.match('(?P<number>(([1-3]*[A-D]*[0-9]*)(.[1-3]*[0-9])+))', oText.Range.Text)
        stylematch = re.match('Heading (?P<i>\d)', oText.Style.NameLocal)
        if results!= None and oText.Style != None and stylematch != None:
            doccat.append((oText.Style.NameLocal, oText.Range.Text[:len(results.group('number'))],oText.Range.Text[len(results.group('number')):]))
            style = oText.Style.NameLocal

是否有更有效的方法来搜索标题,而不是调用和检查Word文档中的每个Paragraph对象?

修改

我还应该提到我正在使用它:

doc.ConvertNumbersToText()

将自动编号转换为段落文本中可搜索的内容。

第二次编辑:

我不是在寻找目录,尽管我希望能够作为一种选择。我只是在寻找标题1,2,3,4,5,6 ......等等。

1 个答案:

答案 0 :(得分:0)

如果您在Word中录制宏,并使用转到(Ctrl-G),在对话框中选择标题,您将获得如下声明:

Selection.GoTo What:=wdGoToHeading, Which:=wdGoToNext, Count:=1, Name:=""

在GoTo对话框中,如果这是您所指的自动编号类型,您还可以选择字段,AUTONUM。

或者,使用“高级查找”录制宏,单击“格式”按钮,然后单击“样式...”以获取:

Selection.Find.Style = ActiveDocument.Styles("Heading 1")

这允许您指定特定的标题样式。

第三种选择是创建一个目录 - 它基于标题样式 - 抓取其文本,然后Undo TOC。 (我没有尝试过,但确信它会起作用。当然,这取决于你的具体意图。)