Нам нужно сгенерировать отчет, используя шаблон.На некоторых слайдах содержатся таблицы, в которые данные будут извлечены из источников данных и записаны в ячейки таблицы, в конце концов сохраните отчет под новым именем.При записи в ячейки таблицы мы должны записать ее динамически, то есть при переполнении таблицы дублировать слайд и продолжить добавление данных на следующем слайде.
Рассмотрим следующий сценарий.
- Чтение шаблона ppt
- Чтение таблицы на слайде, скажем, высота строки ячейки, в которой мы находимся,
x Pt
. - Теперь я заменяю некоторый текст в ячейкевысота строки становится
x+y Pt
. - Теперь, когда я нахожу высоту этой строки, я все равно получаю
x Pt
.
есть ли способ, которым я могу динамически получитьразмер строки, как я вставляю данные в ячейки таблицы ???так что я могу вычислить высоту таблицы и отобразить оставшуюся таблицу на следующем слайде.
Примечание: я могу дублировать слайд, могу записать в ту же таблицу на следующем слайде через взлом кода из этогобиблиотека.
Я попробовал себя с помощью следующего подхода.
- Всякий раз, когда я добавляю некоторый текст в ячейку, вызывая эту функцию с объектом презентации
- Сохраняйте его в tempfile
- Прочитать слайд и таблицу с заданным идентификатором
- Считать высоту строки и вернуть ее
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 вручную и вручную изменил высоту строки с помощью сенсорной панели, затем выполнил приведенный выше код и обнаружил, что он дает новую высоту.
Я копаю глубже,
- созданпустой PPT в powerpoint.
- Добавлена простая таблица с несколькими строками и введены большие данные.
unzip <ppt_file>
затем открыли файл slide.xml
, увидели высоту, но высоту всегостроки одинаковы. - Затем вручную изменяем высоту строки.
- Снова разархивируем файл, затем обнаруживаем, что значение высоты изменилось.10
Это не проблема ни со стороны python-pptx
, ни со стороны Microsoft, но я хочу получить высоту ячейки динамически ???Как я мог это сделать ???
В настоящее время я думаю об аппроксимации высоты на основе таких параметров, как размер шрифта, ширина ячейки, высота и количество символов в тексте и т. Д. Я чувствую, что это не так точнотак что ищите лучшее решение ...