2

我需要使用 python-pptx 生成一个包含折线图和条形图的图表。根据文档,有人说

“大多数图表只有一个图,python-pptx 还不支持创建多图图表,但您可以在已经拥有它们的图表上访问多个图。”

http://python-pptx.readthedocs.io/en/latest/user/charts.html

它仍然成立吗?有解决方法吗?我最喜欢在模板中使用图表占位符自动创建图表,而不是在模板中预先创建图表,然后只更新值。第一种方法与我目前拥有的所有其他 PowerPoint 自动化更一致。

4

1 回答 1

3

API 级别尚不支持在 python-pptx 中创建所谓的“多图”图表。因此,如果您想这样做,则必须为该部分编写自己的代码。

然而,python-pptx 的内部结构可以提供很多支持,包括在添加额外绘图后提供完全访问权限。

完整的食谱将超出这种问答形式,但这里是一般要点。

  • PowerPoint 演示文稿本质上是一个大的 XML 层次结构。一般策略是找到正确的父元素,然后使用可用的最佳方法将正确的子 XML 层次结构(表示新图)添加到该父元素。

  • 因此,您希望首先发现感兴趣的邻域中的多图 XML 层次结构是什么样的。opc-diag 对此很有帮助。使用具有两个图(可能是线和条)的图表创建单张幻灯片演示。使用 opc-diag 转储chart1.xml零件并搜索lineChartandbarChart元素。如果您从折线图开始,您的工作就是添加在barChart那里找到的元素。所以现在你可以清楚地看到你的目标。

  • 您使用 python-pptx 来获取该父元素。在这种情况下,我相信它是c:plotArea元素。你可以在chart.plots._plotArea. 这将是一个子类,BaseOxmlElement它本身就是_Element来自 lxml 的子类。因此,所有这些操作都由您支配。如果您搜索“python-pptx 变通方法”,您会发现一些示例。这里只是一个方便的提示,您可以使用其.xml属性为任何元素对象转储 XML。这对于在您学习 XML 操作调用时跟踪您的进度非常有帮助。

  • 然后构建新的子元素并将其添加到正确位置的父元素中,可能使用 .append(),也可能使用 .insert()。另一种方法可能是添加一个虚拟条形图,找到它的c:barChart元素,执行 deepcopy() 并附加它。如果它有效,那么内部的工作就会少得多。

无论如何,希望能给你一个想法。正如您可能会说的那样,这不是为了胆小的人,但是很多拥有 Python 印章的人已经能够通过这种方法获得他们需要的东西。

于 2016-08-17T19:12:26.363 回答