Когда я добавляю текстовые поля в текстовый документ, они добавляются внутри холста для рисования.Поэтому форма верхнего уровня - это холст, а текстовые поля содержатся внутри холста.Вы должны использовать метод CanvasItems
для доступа к объектам на холсте, то есть к текстовым полям
. Следующий пример работает для меня.Я создал текстовый документ с одним текстовым полем.
import win32com.client
word = win32com.client.Dispatch("Word.Application")
canvas = word.ActiveDocument.Shapes[0]
for item in canvas.CanvasItems:
print item.TextFrame.TextRange.Text
Обновление: ответ на комментарий ОП.
Я думаю, что проблема с вашим кодом заключается в том, чтокаждая строка кода с Find
создает новый объект Find
.Вы должны создать и связать объект Find
с именем, затем изменить его атрибуты и выполнить его.Итак, в вашем коде вы должны иметь:
find = shp.TextFrame.TextRange.Find
find.Text = source
find.Replacement.Text = target
find.Execute(Replace=1, Forward=True)
или одну строку:
shp.TextFrame.TextRange.Find.Execute(FindText=source, ReplaceWith=target, Replace=1, Forward=True)
Оба эти метода работают в моем тестовом коде.