Как создать слайды, содержащие диаграмму, определенную в макете PowerPoint с Python? - PullRequest
0 голосов
/ 20 декабря 2018

У меня есть один макет, который будет использоваться для создания сотен слайдов с отображением данных, содержащихся в файле Excel.

Мне удалось написать макрос с помощью python-pptx (я не знаком с ним)с помощью VBA) создание слайдов с требуемым текстом с использованием заполнителей макетов PowerPoint.

Теперь мне нужно добавить диаграмму на каждый слайд (каждая диаграмма, содержащая определенные серии данных) на основе диаграммы, указанной в моем макете.Можно ли добиться этого с помощью python-pptx?Если нет, что будет альтернативой (с использованием Python)?

1 Ответ

0 голосов
/ 08 января 2019

Это возможно.Вы можете работать с местозаполнителями диаграмм или получить параметры из указанной диаграммы макетов и создать новую диаграмму на основе диаграммы макетов.

Все параметры хорошо документированы в 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
        ) 

Надеюсь, идея прояснится.Заполнить путь проще, но если вам нужно указать больше, чем возможно в заполнителе, вам нужно пойти вторым путем.

...