выравнивание ячейки таблицы python-doxc добавляет новую строку - PullRequest
0 голосов
/ 18 января 2019

Я хочу выровнять текст внутри ячейки таблицы документа Word , созданного с помощью python-docx . Я следовал этому совету , но проблема в том, что новая строка добавляется внутри ячейки перед текстом, поэтому вертикальное выравнивание нарушено.

Это код без правильной настройки выравнивания:

table = document.add_table(rows=1, cols=4)
hdr_cells = table.rows[0].cells

hdr_cells[0].width = Inches(0.1)
hdr_cells[1].width = Inches(10)
hdr_cells[2].width = Inches(1)
hdr_cells[3].width = Inches(1)

for entry in context['invoices']['entries']:
    row_cells = table.add_row().cells
    row_cells[0].text = str(entry['amount'])
    row_cells[1].text = entry['line']
    row_cells[2].text = entry['unit_price_label']
    row_cells[3].text = entry['subtotal']

И это итоговый документ: enter image description here

Это код с правильной настройкой выравнивания:

table = document.add_table(rows=1, cols=4)
hdr_cells = table.rows[0].cells

hdr_cells[0].width = Inches(0.1)
hdr_cells[1].width = Inches(10)
hdr_cells[2].width = Inches(1)
hdr_cells[3].width = Inches(1)

for entry in context['invoices']['entries']:
    row_cells = table.add_row().cells
    row_cells[0].text = str(entry['amount'])
    row_cells[1].text = entry['line']
    row_cells[2].add_paragraph(entry['unit_price_label']).alignment = WD_ALIGN_PARAGRAPH.RIGHT
    row_cells[3].add_paragraph(entry['subtotal']).alignment = WD_ALIGN_PARAGRAPH.RIGHT

И полученный документ:

enter image description here

Есть ли способ избежать возврата каретки при правильном выравнивании ячеек таблицы с python-docx ?

1 Ответ

0 голосов
/ 18 января 2019

Краткий ответ: Да, используйте

row_cells[0].paragraphs[0].alignment = WD_ALIGN_PARAGRAPH.RIGHT

В ячейке таблицы всегда должен быть хотя бы один абзац;это предписано спецификацией ISO 29500 (и имеет смысл, если вы изучите его достаточно глубоко).

В соответствии с этим требованием новая (и пустая) ячейка содержит один пустой абзац.Если вы позвоните .add_paragraph() в пустую ячейку, то у вас получится два абзаца.

Так что секрет, чтобы избежать лишних абзацев, - это начать с того, который у вас уже есть.Только если вам нужно более одного абзаца, вы называете .add_paragraph().

К одному существующему абзацу обращаются как cell.paragraphs[0], и им можно манипулировать так же, как и любым другим абзацем в python-docx

...