按包含的段落检索页码

时间:2014-06-07 07:29:50

标签: .net python-2.7 com ms-word win32com

我根据它们的段落难以获取页码。我的代码如下。 para_list存储找到短语i' m的段落。然后我尝试选择范围和 然后检索页码。然而,我收到的所有内容都是重复相同的页码。有人可以提出另一种方法或揭示我做错了什么。感谢

for para in doc.Paragraphs:
    count=count+1
    if phrase in para.Range.Text:

        para.Range.Select
        para_list.append(count)
        p_list.append(doc.ActiveWindow.Selection.Information(constants.wdActiveEndAdjustedPageNumber))

2 个答案:

答案 0 :(得分:2)

在我看来,使用Range.Information[constants.wdActiveEndAdjustedPageNumber]是正确的方式(请参阅How do I find the page number for a Word Paragraph中的第二个答案)。但是,我不确定你为什么选择这个选项,而不是段落范围本身。我猜(不能在这里尝试)以下内容应该有效:

for count, para in enumerate(doc.Paragraphs):
    if phrase in para.Range.Text:
        pageNum = para.Range.Information(constants.wdActiveEndAdjustedPageNumber)
        print 'page for para #%s is %s' % (count, pageNum)

文体说明:para_listp_list?名称应更清楚地标明每个容器的用途。

答案 1 :(得分:0)

作为黑客你可以使用

range_obj =doc.ActiveWindow.Selection.GoTo(constants.wdGoToPage,constants.wdGoToNext,1 )
range_obj2 =doc.ActiveWindow.Selection.GoTo(constants.wdGoToPage,constants.wdGoToNext,1 )

char_index1= range_obj.start #will give you the character index for end of one page
char_index2 = range_obj2.start # character index for next page

#Compare with the paragraph index. The min positive difference tells you the page the paragraph is on

position= doc.Paragraphs(index).start