Как выровнять и установить цвет одновременно внутри ячейки с помощью python-docx - PullRequest
0 голосов
/ 09 июля 2019

Я пытаюсь составить таблицу с помощью python-docx. Это мой вывод желаний:

¡- ОК (полужирный) - ¡- СРЕДНИЙ (красным) - ¡---- ПРАВО ¡

И вот что я получаю:

¡- ОК (полужирный) - ¡СРЕДНИЙ (красным) ---- ¡ПРАВО ---- ¡

Код, который я использую:

    from docx import Document
    from docx.shared import RGBColor
    from docx.enum.text import WD_ALIGN_PARAGRAPH

    document = Document()

    table = document.add_table(rows=1, cols=3, style='Table Grid')
    fila = table.rows[0].cells

    # First cell: OK in bold
    texto = 'OK'
    dentro = fila[0].paragraphs[0]
    dentro.add_run(texto).bold = True
    dentro.alignment = WD_ALIGN_PARAGRAPH.CENTER

    # Second cell: Middle in red
    texto = 'MIDDLE'
    dentro = fila[1].paragraphs[0].add_run(texto)
    dentro.alignment = WD_ALIGN_PARAGRAPH.CENTER
    font = dentro.font
    font.color.rgb = RGBColor(255,0,0) # Red

    # Third cell : Right
    texto = 'RIGHT'
    dentro = fila[2].paragraphs[0]
    dentro.add_run(texto)
    dentro.aligment = WD_ALIGN_PARAGRAPH.RIGHT

    document.save('demo.docx')

У меня есть две проблемы: во-первых, я не получаю правильное выравнивание в средней ячейке, когда добавляю проблему с цветом. Второе - это то, что в ячейках после неправильного вывода среднего, выравнивание не работает. Как я могу это исправить? Нужно ли ждать до следующей версии (актуальная 0.8.10)? Спасибо,

1 Ответ

1 голос
/ 09 июля 2019

Ваш код для средней ячейки отличается. Вы назначаете новый прогон dentro, а не абзацу. Это приводит к тому, что значение выравнивания присваивается прогону, где он ничего не делает.

Изменение:

dentro = fila[1].paragraphs[0].add_run(texto)

до:

dentro = fila[1].paragraphs[0]
run = dentro.add_run(texto)
font = run.font
font.color.rgb = RGBColor(255, 0, 0)

Я не уверен, как объяснить, что выравнивание RIGHT не "берет" в третьей ячейке; Я бы исправил это, а потом посмотрел, как у тебя дела.

...