我们需要使用模板来生成报告。一些幻灯片包含表格,这些表格将从数据源中提取数据并将其写入表格单元格,最后以新名称保存报告。在写入表格单元格时,我们需要动态地编写它,这意味着如果表格溢出,请复制幻灯片,并继续在下一张幻灯片中添加数据。
请考虑以下情形。
x Pt
。x+y Pt
。x Pt
。有什么方法可以在将数据插入表单元格时动态获取行大小???这样我就可以计算桌子的高度并在下一张幻灯片中渲染剩余的桌子。
注意:我可以复制该幻灯片,并可以通过该库中的代码hack写入下一张幻灯片中的同一表。
我尝试了以下方法。
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
然后,我感到惊讶的是仍然如此。然后,我手动打开PPT,并使用触摸板手动调整行高的大小,然后在上面的代码中执行,然后发现它在赋予新的高度。
我更深入地挖掘
unzip <ppt_file>
然后打开slide.xml
文件,看到了高度,但是所有行的高度都相同。这既不是python-pptx
方面的问题,也不是Microsoft的问题,但是我想动态获取像元高度?我该怎么做???
目前,我正在考虑根据字体大小,单元格宽度,高度和文本中的字符数等参数来估算高度...我觉得不太准确,因此正在寻找更好的解决方案... >