Шаблонный подход работает, и его главное преимущество заключается в том, что это действительно кроссплатформенное решение.Однако для этого необходимо, чтобы стиль уже применялся в документе один раз.
Давайте рассмотрим (упрощенную) версию примера игрушки со страницы документации python-docx
.
Первый шаг включает создание шаблонного документа:
from docx import Document
document = Document()
document.add_heading('Document Title', 0)
p = document.add_paragraph('A plain paragraph having some ')
p.add_run('bold').bold = True
p.add_run(' and some ')
p.add_run('italic.').italic = True
document.add_heading('Heading, level 1', level=1)
document.add_paragraph('Intense quote', style='IntenseQuote')
document.add_paragraph(
'first item in unordered list', style='ListBullet'
)
document.add_paragraph(
'first item in ordered list', style='ListNumber'
)
document.save('demo.docx')
(Обратите внимание, что на этом первом шаге вы также можете применить стили вручную без использования python-docx
, то есть изв Word.)
Далее вы открываете demo.docx
в Microsoft Word, где вы:
- добавляете нужный заголовок
- вставляете номера страниц из меню
- сохранить документ
После того, как вы сделали вышеупомянутое, вы просто удаляете основное содержимое документа demo.docx
(но не содержимое верхнего и нижнего колонтитула!) Исохраните файл еще раз.
На втором шаге вы вызываете demo.docx
, используя python-docx
, чтобы внести необходимые изменения:
from docx import Document
document = Document('demo.docx')
document.add_heading('A New Title for my Document', 0)
p = document.add_paragraph('A new paragraph having some plain ')
p.add_run('bold').bold = True
p.add_run(' and some ')
p.add_run('italic.').italic = True
document.add_heading('New Heading, level 1', level=1)
document.add_paragraph('Intense quote', style='IntenseQuote')
document.add_paragraph(
'first new item in unordered list', style='ListBullet'
)
document.add_paragraph(
'first new item in ordered list', style='ListNumber'
)
document.save('demo.docx')
Вы можете даже добавлять дополнительные дополнения, напримеркак таблица с существующим стилем таблицы:
from docx import Document
document = Document('demo.docx')
document.add_page_break()
recordset = [ [1, "101", "Spam"], [2, "42", "Eggs"], [3, "631", "Spam, spam, eggs, and spam"]]
table = document.add_table(rows=1, cols=3)
hdr_cells = table.rows[0].cells
hdr_cells[0].text = 'Qty'
hdr_cells[1].text = 'Id'
hdr_cells[2].text = 'Desc'
for item in recordset:
row_cells = table.add_row().cells
row_cells[0].text = str(item[0])
row_cells[1].text = str(item[1])
row_cells[2].text = item[2]
table.style = 'ColorfulShading'
document.save('demo.docx')
Конечно, можно избежать повторения первого шага все время, скопировав настроенный файл , а затем внеся необходимые изменения (например, demo_copy.docx
), не затрагивая шаблон:
import shutil
shutil.copyfile('demo.docx', 'demo_copy.docx')
Наконец, стоит отметить, что вы также можете использовать настроенные стили!Пример того, как это сделать, используя python-docx
и стили таблиц см. Здесь .