Как найти и заменить все вхождения строки в документе MS Word на Python? - PullRequest
6 голосов
/ 18 мая 2010

В данный момент я довольно озадачен. Основано на Могу ли я использовать Win32 COM для замены текста в текстовом документе? Мне удалось написать простую систему шаблонов, которая генерирует документы документов из шаблона слова документа (в Python).

Моя проблема в том, что текст в «Текстовых полях» не находится таким образом. Даже в самом Word нет возможности искать все - вам фактически приходится выбирать между «Основным документом» и «Текстовыми полями». Будучи новичком в мире Windows, я попытался просмотреть документацию по VBA, но не нашел помощи (вероятно, из-за того, что «текстовое поле» является очень распространенным термином).

word.Documents.Open(f)
wdFindContinue = 1
wdReplaceAll = 2
find_str = '\{\{(*)\}\}'
find = word.Selection.Find

find.Execute(find_str, False, False, True, False, False, \
True, wdFindContinue, False, False, False)

while find.Found:
    t = word.Selection.Text.__str__()
    r = process_placeholder(t, answer_data, question_data)

    if type(r) == dict:
        errors.append(r)
    else:
        find.Execute(t, False, True, False, False, False, \
        True, False, False, r, wdReplaceAll)

Это соответствующая часть моего кода. Я уже смог обойти все проблемы сам (подсказка: если вы хотите заменить строки более чем на 256 символов, вы должны сделать это через буфер обмена и т. Д.)

1 Ответ

2 голосов
/ 18 мая 2010

Возможно, вы можете использовать OpenOffice API , используя компонентную технологию UNO . С Python-UNO bridge вы можете подключиться к экземпляру OpenOffice, работающему в режиме без головы. Посмотрите учебник , чтобы начать.
Это может быть излишним для вашего сценария, но это очень мощное и гибкое решение.

...