gpt4 book ai didi

python - 如何使用 Python 生成包含在 PowerPoint 布局上定义的图表的幻灯片?

转载 作者:太空宇宙 更新时间:2023-11-04 02:10:13 25 4
gpt4 key购买 nike

我有一个布局,可用于生成数百张幻灯片,显示 Excel 文件中包含的数据。

我已经能够使用 python-pptx(我不熟悉 VBA)编写宏,使用 PowerPoint 布局占位符生成包含所需文本的幻灯片。

现在我需要根据布局中指定的图表在每张幻灯片上添加一个图表(每个图表包含特定数据系列)。可以用 python-pptx 实现吗?如果不是,有什么替代方案(使用 Python)?

最佳答案

这是可能的。您可以使用图表占位符,也可以从指定的布局图表中获取参数并根据布局图表创建新图表。

所有参数都在 https://python-pptx.readthedocs.io/en/latest/ 中有详细记录.

这是一个或多或少取自使用图表占位符的文档的示例:

from pptx import Presentation
from pptx.chart.data import CategoryChartData
from pptx.enum.chart import XL_CHART_TYPE

prs = Presentation('test.pptx')

# either add slide with chart placeholder layout
slide = prs.slides.add_slide(prs.slide_layouts[1])
# or choose existing slide
slide = prs.slides[3]

# get the relevant placeholder object
for shape in slide.placeholders:
print( '%d %s' % (shape.placeholder_format.idx, shape.name))
placeholder = prs.slides[3].placeholders[10] # idx key, not position

# it's important to have chart placeholder
placeholder.name
# 'Chart Placeholder 1'
placeholder.placeholder_format.type
# CHART (12)

# fill ChartData object with your data
chart_data = CategoryChartData()
chart_data.categories = ['East', 'West', 'Midwest']
chart_data.add_series('Series 1', (19.2, 21.4, 16.7))

graphic_frame = placeholder.insert_chart(XL_CHART_TYPE.COLUMN_CLUSTERED, chart_data)

另一种可能性更复杂,但您可以根据定义的“布局”定义所生成图表的几乎所有细节。对于这种情况,您需要一张带有适当格式示例图表的 PowerPoint 幻灯片。

# presentation with example chart
prs = Presentation('chart-01.pptx')
# presentation to add the new chart to
prs2 = Presentation('test1.pptx')
blank_slide_layout = prs2.slide_layouts[6]

# get information from the example chart
# shape which contains chart
bchart = prs.slides[3].shapes[0]

cx = deepcopy(bchart.width)
cy = deepcopy(bchart.height)
x = deepcopy(bchart.left)
y = deepcopy(bchart.top)

chart_type = bchart.chart.chart_type

# further formatting information possible:
# bchart.chart.has_legend, bchart.chart.legend..., bchart.chart.value_axis..., bchart.chart.category_axis...

# define chart area
chart_pl_area = deepcopy(bchart.chart._chartSpace.chart.plotArea[0])


# define chart data
chart_data = CategoryChartData()
chart_data.categories = ['East', 'West', 'Midwest']
chart_data.add_series('Series 1', (19.2, 21.4, 16.7))

# add new slide without chart/blank
new_sli = prs2.slides.add_slide(blank_slide_layout)
# add chart with defined parameters and data
new_chart = new_sli.shapes.add_chart(
chart_type, x, y, cx, cy, chart_data
)

我希望这个想法变得清晰。占位符方式更容易进行,但如果您需要指定比占位符中可能的更多内容,则需要采用第二种方式。

关于python - 如何使用 Python 生成包含在 PowerPoint 布局上定义的图表的幻灯片?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53867495/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com