动态计算表格行高

时间:2019-02-12 08:33:34

标签: python python-pptx

我们需要使用模板来生成报告。一些幻灯片包含表格,这些表格将从数据源中提取数据并将其写入表格单元格,最后以新名称保存报告。在写入表格单元格时,我们需要动态地编写它,这意味着如果表格溢出,请复制幻灯片,并继续在下一张幻灯片中添加数据。

请考虑以下情形。

  1. 阅读ppt模板
  2. 在幻灯片中读取一张桌子,说我们所在的单元格的行高为x Pt
  3. 我替换了单元格上的一些文本,现在行的高度变为x+y Pt
  4. 现在,当我发现该行的高度时,我仍然得到x Pt

有什么方法可以在将数据插入表单元格时动态获取行大小???这样我就可以计算桌子的高度并在下一张幻灯片中渲染剩余的桌子。

注意:我可以复制该幻灯片,并可以通过该库中的代码hack写入下一张幻灯片中的同一表。

我尝试了以下方法。

  1. 每当我向单元格中添加一些文本时,使用 演示对象
  2. 将其保存到临时文件中
  3. 阅读具有给定ID的幻灯片和表格
  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

然后,我感到惊讶的是仍然如此。然后,我手动打开PPT,并使用触摸板手动调整行高的大小,然后在上面的代码中执行,然后发现它在赋予新的高度。

我更深入地挖掘

  1. 在PowerPoint中创建了一个空白的PPT。
  2. 添加了一个只有几行的简单表并输入了一些大数据。
  3. unzip <ppt_file>然后打开slide.xml文件,看到了高度,但是所有行的高度都相同。
  4. 然后,手动调整行高的大小。
  5. 重新解压缩文件,然后发现高度值已更改。

这既不是python-pptx方面的问题,也不是Microsoft的问题,但是我想动态获取像元高度?我该怎么做???

目前,我正在考虑根据字体大小,单元格宽度,高度和文本中的字符数等参数来估算高度...我觉得不太准确,因此正在寻找更好的解决方案...

0 个答案:

没有答案
相关问题