Замена текста в 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}}.