使用 pywin32 转到 Word 文档中的指定页面



我有一个很长的word文档,有100多个表格。我正在尝试允许用户通过python选择页码,以将数据输入到word文档中指定页面上的表中。我能够使用以下代码将数据输入到表中,但问题是文档太长,当用户进入 Word 文档 80 页时,用户不容易知道他们在哪个表号上(不是每个页面都有一个表,有些页面有多个表(。

import win32com.client as win32    
word = win32.Dispatch("Word.Application")
word.Documents.Open(my_document_path)
doc = word.ActiveDocument
table = doc.Tables(51) #random selection for testing purposes
table.Cell(Row = 7, Column = 2).Range.Text = "test"

因此,我需要帮助的是提取通过用户输入指定的word文档中页面上的表号(即,用户指定他们要将数据添加到第13页,以便代码将确定表51在第72页上(。

如果我用单词录制一个宏以简单地跳转到页面,这就是 VB 代码......

Selection.GoTo What:=wdGoToPage, Which:=wdGoToNext, Name:="13"

我尝试使用以下代码行将其转换为 Python,但它没有跳转到正确的页面。

doc.GoTo(win32.constants.wdGoToPage, win32.constants.wdGoToNext, "13")

GoTo处理Selection对象,该对象是 Word 应用程序的属性,而不是文档。在问题的代码中,word表示 Word 应用程序,因此word.Selection.GoTo应该可以工作。

请注意,在GoTo方法调用中将wdGoToAbsolute替换为wdGoToNext- 这对于转到特定页码"更安全"。

为了获取页面的整个Range,可以使用内置书签名称"Page"。这仅适用于选择所在的页面,这就是为什么需要首先转到该页面的原因。然后可以获取页面上的第一个表(或任何其他表索引(。

如果还需要文档中表格的索引号,则可以通过获取文档的范围,然后将端点设置为页面范围的末尾来计算。

import win32com.client as win32    
word = win32.Dispatch("Word.Application")
word.Documents.Open(my_document_path)
doc = word.ActiveDocument
word.Selection.GoTo(win32.constants.wdGoToPage, win32.constants.wdGoToAbsolute, "13")
rngPage = doc.Bookmarks("Page").Range
table = rngPage.Tables(1) #first table on the page
table.Cell(Row = 7, Column = 2).Range.Text = "test"
#rngToPage = doc.Content
#rngToPage.End = rngPage.End
#tableIndex = rngToPage.Tables.Count

请注意,我不使用 Python,所以我无法测试 Python 代码。所以要注意语法错误。出于这个原因,我附加了用于测试该方法的 VBA 代码。

Sub GetTableCountOnPage()
Dim tbl As Word.Table
Dim sPage As String
Dim rngPage As Word.Range
sPage = InputBox("On which page is the table?")
Selection.GoTo What:=wdGoToPage, Name:=sPage
Set rngPage = Selection.Document.Bookmarks("Page").Range
If rngPage.Tables.Count > 0 Then
Set tbl = rngPage.Tables(1)
tbl.Select
Dim rngToTable As Word.Range
Set rngToTable = Selection.Document.content
rngToTable.End = rngPage.End
Debug.Print rngToTable.Tables.Count & " to this point."
End If
End Sub

最新更新