2016-06-28 10 views
1

Допустим, у меня есть определенный пункт в моем DOCX документ с определенным форматированием, например:
«Foo бар»
Я хочу сделайте что-то вроде шаблона этого абзаца, чтобы скопировать его в один и тот же документ несколько раз.
Копирование текста, как в примере, означает отказ от форматирования текста.
Копировать абзац в том же документе (Питон 3.x, DOCX)

 
from docx import Document 

document = Document('input.docx') 
template = document.paragraphs[0] 
for x in range(100): 
    document.add_paragraph(template.text) 
document.save('output.docx')

Есть ли общий способ сделать это с помощью библиотеки Python-DOCX?
Другие решения для python и django в частности также оценены!
Спасибо заранее.

+0

Ваш вопрос слишком абстрактный, чтобы дать полезный ответ. В общем, вам нужно будет перейти на следующий уровень (выполняется внутри абзацев), потому что это то, где форматирование символов. Если вы можете сделать свою конкретную задачу более конкретным, лучший ответ может быть возможен. Я возьму трещину ниже с этими оговорками. – scanny

ответ

0

В вашем простом примере, вы могли бы сделать что-то вроде этого:

def clone_run_props(tmpl_run, this_run): 
    this_run.bold = tmpl_run.bold 
    ... maybe other possible run properties ... 

template_paragraph = ... however you get this ... 
new_paragraph = document.add_paragraph() 
for run in template_paragraph: 
    cloned_run = new_paragraph.add_run() 
    clone_run_props(run, cloned_run) 
    cloned_run.text = ... however you get this ... 

Этот подход будет работать, когда форматирование символ непосредственно применяется, но не тогда, когда он косвенно применяется, например, при помощи стиля символа ,

+0

Я ищу более общее решение, например, когда пользователь загружает шаблон docx (мне даже не нужно знать, какой именно шаблон), и, как результат, получает документ с определенными количествами тех шаблонов, заполненных разными информацию из базы данных (например, имена, фамилии и т. д.). Заполнение для одного документа работает отлично и быстро, но я ищу решение для запроса. Спасибо за ваш ответ! – Insolence357

+0

Мне нужно было бы увидеть пример. Есть много подробностей, о которых вы не упоминали, например, как вы знаете, где и как и какие ограничения должен соблюдать «шаблонный» документ. Если вы ищете шаблоны общих документов, например, поместите строки подстановки, такие как '{{name}}' в текст, а затем выполните замену, вы говорите о другой (и довольно сложной) проблеме. Вы можете узнать больше об этом, выполнив поиск в 'python-docx template substitution'. – scanny

+0

Это именно то, о чем я говорю, спасибо за ваш совет - я постараюсь найти его. Но пока проблема не в замене, регулярные выражения отлично подходят для простых замен, я просто не могу размножать контент для нескольких объектов в наборе запросов. – Insolence357