我需要使用python-pptx生成一个包含线图和条形图的图表。根据文件,有人说
“大多数图表只有一个图表,python-pptx还没有 支持创建多绘图图表,但您可以访问多个绘图 在已有它们的图表上。“
http://python-pptx.readthedocs.io/en/latest/user/charts.html
它仍然适用吗? 有变通方法吗? 我更喜欢在模板中使用图表占位符自动创建图表,而不是在模板中预先创建图表,之后只更新值。第一种方法与我目前拥有的所有其他PowerPoint自动化更加一致。
答案 0 :(得分:1)
API级别尚不支持在python-pptx中创建所谓的“多图”图表。因此,如果您想这样做,则必须为该部分编写自己的代码。
然而,python-pptx的内部结构可以提供很多支持,包括在添加额外的绘图后提供完全访问权限。
完整的配方将超出此Q& A格式,但这是一般要点。
PowerPoint演示文稿本质上是一个大的XML层次结构。一般策略是找到通往正确父元素的方法,然后使用可用的最佳方法将正确的子XML层次结构(表示新图)添加到该父元素。
所以你想首先发现一个多图XML层次结构在感兴趣的邻域中的样子。 opc-diag对此很有帮助。使用带有两个图表(可能是直线和条形图)的图表创建单个幻灯片演示文稿。使用opc-diag转储right to left
部分并搜索chart1.xml
和lineChart
元素。如果您从折线图开始,那么您的工作就是添加您在那里找到的barChart
元素。所以现在你可以清楚地看到你的目标了。
使用python-pptx获取父元素。在这种情况下,我相信它是barChart
元素。你可以在c:plotArea
得到它。这将是chart.plots._plotArea
的子类,它本身是来自lxml的BaseOxmlElement
的子类。因此,所有这些操作都可供您使用。如果你搜索'python-pptx workaround函数',你会发现一些例子。这里只是一个简单易用的提示,您可以使用其_Element
属性为任何元素对象转储XML。这对于在学习XML操作调用时跟踪进度非常有用。
然后构建新的子元素并将其添加到正确位置的父元素中,可能使用.append(),可能的.insert()。另一种方法可能是添加虚拟条形图,找到它的.xml
元素,执行deepcopy()并追加它。如果有效,那对内部构件的工作就会少得多。
无论如何,希望能给你一个想法。正如你可能会说它不适合胆小的人,但是很多拥有Python排骨的人已经能够通过这种方法获得他们所需要的东西。