Кто-нибудь написал функцию, которая выравнивает все ячейки или (строки / столбцы) в таблице в python-pptx? - PullRequest
0 голосов
/ 04 июля 2019

Я автоматически генерирую колоду слайдов с помощью python-pptx, и есть много таблиц, на которых я представляю информацию.Я хотел бы, чтобы все числовые столбцы были в центре.Прямо сейчас я делаю эту ячейку за ячейкой, потому что каждый раз, когда я добавляю текст в ячейку в форме cell.text = str (number), он перезаписывает форматирование, которое было в исходном шаблоне, так что ранее центрированный текст переходит кВыровнено по левому краю.

Есть ли способ перезаписи текста в ячейке без изменения исходного форматирования?Или, возможно, есть способ установить формат по умолчанию для всей таблицы?Если нет, кто-нибудь написал фрагмент кода, который позаботится об этом?

Вот идея того, что я должен сделать сейчас:

table = slide.shapes[1].table
slide.shapes[1].paragraph
cell = table.cell(1,1); cell.text = str(man_version_match)
cell.text_frame.paragraphs[0].alignment=PP_ALIGN.CENTER
cell = table.cell(2,1); cell.text = str(man_version_wrong)
cell.text_frame.paragraphs[0].alignment=PP_ALIGN.CENTER
cell = table.cell(3,1); cell.text = str(no_version_match-fal_neg)
cell.text_frame.paragraphs[0].alignment=PP_ALIGN.CENTER
cell = table.cell(4,1); cell.text = str(fal_neg)
cell.text_frame.paragraphs[0].alignment=PP_ALIGN.CENTER
cell = table.cell(5,1); cell.text = str(len_manifest)
cell.text_frame.paragraphs[0].alignment=PP_ALIGN.CENTER

То, что я хотел бы сделать, это простоустановите диапазон для применения форматирования в таблице или просто примените его ко всей таблице.

1 Ответ

0 голосов
/ 04 июля 2019

Как насчет этого:

def set_centered_text(cell, text):
    """Change contents of `cell` to `text`, aligned center."""
    cell.text = text
    cell.text_frame.paragraphs[0].alignment = PP_ALIGN.CENTER


set_centered_text(table.cell(1, 1), str(man_version_match))
set_centered_text(table.cell(2, 1), str(man_version_wrong))
set_centered_text(table.cell(3, 1), str(no_version_match - fal_neg))
# ---etc.---

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

def set_centered_col_values(table, col, values):
    """Assign each str in `values` to the next cell in `col` of `table`.

    Values are assigned starting at row 1 and proceed to each following
    row until `values` are exhausted.
    """
    for i, value in enumerate(values):
        row = i + 1
        cell = table.cell(row, col)
        set_centered_text(cell, value)


set_centered_col_values(
    table,
    1,
    [
        str(man_version_match),
        str(man_version_wrong),
        str(no_version_match - fal_neg),
        # ---etc.---
    ],
)
...