Замена текста в docx с помощью python

Есть файл с расширением docx в качестве шаблона, на его основе генерируются другие docx файлы. В изначальном файле есть заготовленные места, куда надо вставить нужный текст. Пишу на python с использованием библиотеки python-docx. Заменяю нужный текст таким образом

for object in doc.paragraphs:
    if 'name' in object.text:
        object.text = object.text.replace('name', 'NAME')

Проблема такая - после срабатывания кода во всех абзацах, в которых была произведена замена, слетает форматирование - подчеркивание, жирный шрифт, размер шрифта. Нужно какие-то решение, которое поможет сохранить форматирование всего абзаца неизменным, но заменить нужные слова. Заранее спасибо


Ответы (2 шт):

Автор решения: Алексей Р

Заменяйте текст не в абзацах, а в "пробегах" (runs) - см. здесь. Выглядеть это будет как-то так:

import docx
doc = docx.Document(r'c:\test\test1.docx')
for para in doc.paragraphs:
            for run in para.runs:
                if 'name' in run.text:
                    run.text = run.text.replace('name', 'NAME')
doc.save(r'c:\test\test2.docx')
→ Ссылка
Автор решения: Віктор

Для заполнения вордовских шаблонов я применяю такой вариант.

from docxtpl import DocxTemplate
import os

filename = os.path.abspath("word/end_blank.docx")
doc = DocxTemplate("word/blank/blank2.docx")
context = { 'a' : string_a,
            'b' : string_b }

doc.render(context)
doc.save(filename)
os.startfile(filename)

В самом шаблоне в нужных местах вписываем переменные в таком виде: {{a}}, {{b}}.

→ Ссылка