Динамический расчет высоты строки таблицы - PullRequest
0 голосов
/ 12 февраля 2019

Нам нужно сгенерировать отчет, используя шаблон.На некоторых слайдах содержатся таблицы, в которые данные будут извлечены из источников данных и записаны в ячейки таблицы, в конце концов сохраните отчет под новым именем.При записи в ячейки таблицы мы должны записать ее динамически, то есть при переполнении таблицы дублировать слайд и продолжить добавление данных на следующем слайде.

Рассмотрим следующий сценарий.

  1. Чтение шаблона ppt
  2. Чтение таблицы на слайде, скажем, высота строки ячейки, в которой мы находимся, x Pt.
  3. Теперь я заменяю некоторый текст в ячейкевысота строки становится x+y Pt.
  4. Теперь, когда я нахожу высоту этой строки, я все равно получаю x Pt.

есть ли способ, которым я могу динамически получитьразмер строки, как я вставляю данные в ячейки таблицы ???так что я могу вычислить высоту таблицы и отобразить оставшуюся таблицу на следующем слайде.

Примечание: я могу дублировать слайд, могу записать в ту же таблицу на следующем слайде через взлом кода из этогобиблиотека.

Я попробовал себя с помощью следующего подхода.

  1. Всякий раз, когда я добавляю некоторый текст в ячейку, вызывая эту функцию с объектом презентации
  2. Сохраняйте его в tempfile
  3. Прочитать слайд и таблицу с заданным идентификатором
  4. Считать высоту строки и вернуть ее
def save_file_get_cell_height(presentation_obj, slide_id, table_shape_id, row_idx):
    """
    This function saves given presentation object and re-reads it, returns given table row height
    """
    new_ppt_name = "temp.pptx"
    presentation_obj.save(new_ppt_name)
    new_pr_obj = AbstractPresentation(new_ppt_name)
    slide_obj = new_pr_obj.presentation.slides[slide_id]
    table_obj = None
    for shape in slide_obj.shapes:
        if shape.shape_id == table_shape_id:
            table_obj = shape.table
            break
    assert table_obj, "Invalid table shape id passed"
    new_cell_height = AbstractPresentation.get_cell_height(table_obj, row_idx)
    os.remove(new_ppt_name)
    return new_cell_height

Затем я удивляюсь, что это все еще будетsame?.Затем я открыл PPT вручную и вручную изменил высоту строки с помощью сенсорной панели, затем выполнил приведенный выше код и обнаружил, что он дает новую высоту.

Я копаю глубже,

  1. созданпустой PPT в powerpoint.
  2. Добавлена ​​простая таблица с несколькими строками и введены большие данные.
  3. unzip <ppt_file> затем открыли файл slide.xml, увидели высоту, но высоту всегостроки одинаковы.
  4. Затем вручную изменяем высоту строки.
  5. Снова разархивируем файл, затем обнаруживаем, что значение высоты изменилось.10

Это не проблема ни со стороны python-pptx, ни со стороны Microsoft, но я хочу получить высоту ячейки динамически ???Как я мог это сделать ???

В настоящее время я думаю об аппроксимации высоты на основе таких параметров, как размер шрифта, ширина ячейки, высота и количество символов в тексте и т. Д. Я чувствую, что это не так точнотак что ищите лучшее решение ...

...