Как изменить выравнивание текста ячейки в таблице MS Word без объекта «абзац» - PullRequest
0 голосов
/ 28 апреля 2019

У меня есть файл шаблона MS Word, который я открываю, изменяю новыми данными из различных источников и затем сохраняю как новый файл.У меня есть несколько таблиц в шаблонном документе, которые имеют соответствующий стиль, включая центрированный текст внутри ячеек таблицы.

Имея некоторое представление о модуле python-docx, я могу легко изменять данные таблицы, назначая новыезначения до cell.text.Однако всякий раз, когда я присваиваю cell.text новое значение, новые данные больше не центрируются, а выровнены по левому краю.

Я просмотрел несколько похожих вопросов, но все ответы, похоже, связаны с изменением объектов абзаца. Этот пост был полезен и предоставил быстрый POC, но также не касается cells, но вместо этого добавляет paragraphs в таблицы.Однако было полезно увидеть, что paragraph объекты имеют атрибут alignment.

# Example table
table = doc.add_table(rows=0, cols=2)
row = table.add_row().cells

p=row[0].add_paragraph('center justified text')
p.alignment = WD_ALIGN_PARAGRAPH.CENTER

p.alignment
>>> 1

В моем текущем случае я заметил, что cells не имеет атрибута alignment.Затем я попытался изменить объекты абзаца, но ничего не изменилось.

from docx import Document
from docx.enum.text import WD_ALIGN_PARAGRAPH
doc = Document(BASE_DOC)

# test table, row, and cell
table = doc.tables[1]
row = table.rows[4]
cells = row.cells
cells[0].alignment
>>> AttributeError: '_Cell' object has no attribute 'alignment'

# attempt to modify paragraph alignment in table cells
for col in table.columns:
    for cell in col.cells:
        for par in cell.paragraphs:
            par.alignment = WD_ALIGN_PARAGRAPH.CENTER

doc.save(NEW_DOC)

1 Ответ

0 голосов
/ 28 апреля 2019

Назначение _Cell.text - это удобный и компактный способ установки содержимого ячейки в известное состояние.Для этого _Cell.text удаляет все содержимое из ячейки, а затем добавляет один абзац, содержащий один прогон с указанным вами текстом.

Поскольку форматирование прогона и абзаца часть прогона или параграфа, который он форматирует, все форматирование прогона и все форматирование абзаца исчезают при назначении на _Cell.text.Это часть бита «установка в известное состояние».

Если вы примените центрирование абзаца после присвоения для _Cell.text, вы увидите, как оно отражается в выходных данных.

В качестве альтернативы, вы могли бы избежать присвоения _Cell.text и перемещаться по существующим абзацам и запускаться самостоятельно.

...