1

我正在寻找一种方法来访问由 python-pptx 库创建的各个条形图的位置。我假设单个条被认为是“形状”,并且确实具有左侧、顶部、宽度、高度的属性。我已经设法使用下面的代码创建图表。

如何引用图表中的各个条形,以及访问它们的属性,因为我需要制作更复杂的图表,即条形之间的箭头显示同比增长等。

谢谢。

# CHART
chart_data = ChartData()
chart_data.categories = ['January', 'February', 'March', 'April']
chart_data.add_series('Revenue', monthly_revenue, 3)
chart_data.add_series('Cost', monthly_cost, 3)

graphic_frame = s.placeholders[10].insert_chart(XL_CHART_TYPE.COLUMN_CLUSTERED, chart_data)
chart = graphic_frame.chart

plot = chart.plots[0]
plot.has_data_labels = True
plot.overlap = -10
data_labels = plot.data_labels
data_labels.font.size = Pt(11)
data_labels.font.color.rgb = RGBColor(0,0,0)
data_labels.number_format = "#,##0"

chart.value_axis.has_minor_gridlines = False
chart.value_axis.has_major_gridlines = False
chart.value_axis.tick_labels.font.size = Pt(12)
chart.value_axis.tick_labels.number_format = "#,##0"
chart.category_axis.tick_labels.font.size = Pt(12)

chart.series[1].fill.solid()
chart.series[1].fill.fore_color.rgb = RGBColor(192,80,77)
4

1 回答 1

3

图表中的条没有单独的位置和大小信息,至少没有存储在 .pptx 文件的 XML 中。

所以简短的回答是你不能直接做你要求使用 python-pptx 的事情。

MS API 可以使用 VBA 访问,也可以使用 Iron Python 访问,它确实提供了 Point.left、.top、.width 和 .height。因此,如果您能够忍受这些困难,您也许可以在那种环境中做某事:) 请注意,这样的代码直接操作 PowerPoint 应用程序实例,如果我没记错的话,只有在 Windows 中。因此,如果您尝试在服务器端运行它,则会出现相当大的问题。

图表的元素(例如条形)不是形状。整个图表是一个独立的对象,包含在所谓的“图形框架”形状中,就像表格一样。图表本身是一个 DrawingML 对象(与 PresentationML 对象相反),一个在 Word、Excel 和 PowerPoint 之间共享的 XML 词汇表。这就是为什么您可以在这三个之间移植图表。无论如何,可能比您想要的更多背景,但简短的故事是它们的处理方式与说一个非常肯定确实具有明确位置和大小的矩形形状非常不同。

于 2016-08-15T21:29:23.997 回答