GoTo
работает с объектом Selection
, который является свойством приложения Word, а не документа. В указанном коде word
представляет приложение Word, поэтому word.Selection.GoTo
должно работать.
Обратите внимание на подстановку wdGoToAbsolute
в вызове метода GoTo
для 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