Графики из Excel в PowerPoint с Python

У меня есть книга Excel, созданная с использованием превосходного модуля "xlsxwriter". В этой книге около 200 встроенных диаграмм. Сейчас я пытаюсь экспортировать все эти графики в несколько презентаций Power Point. В идеале я хочу сохранить исходный формат и внедренные данные без ссылки на внешнюю рабочую книгу Excel.

Я уверен, что есть способ сделать это с помощью VBA. Но мне было интересно, есть ли способ сделать это с помощью Python. Есть ли способ поместить объекты диаграммы xlsxwriter в powerpoints?

Я посмотрел на python-pptx и не могу найти ничего о получении диаграмм или рядов данных из рабочей книги Excel.

Любая помощь приветствуется!

2 ответа

Решение

Потратив часы на разные попытки, я нашел решение этой проблемы. Надеюсь, это поможет кому-то сэкономить время. Следующий код скопирует все графики из "workbook_with_charts.xlsx" в "Final_PowerPoint.pptx".

По какой-то причине, которую мне еще предстоит понять, она работает лучше при запуске этой программы Python из терминала CMD. Это иногда ломается, если вы пытались запустить это несколько раз, даже если первый запуск обычно в порядке.

Другая проблема заключается в том, что в пятой строке, если вы зададите значение False с помощью "presentation=PowerPoint.Presentations.Add(False)", оно не будет работать с Microsoft Office 2013, даже если "True" и "False" будут работать с Microsoft Office 2010.

Было бы здорово, если бы кто-то смог прояснить эти вопросы по двум вопросам.

# importing the necessary libraries
import win32com.client
from win32com.client import constants

PowerPoint=win32com.client.Dispatch("PowerPoint.Application")
Excel=win32com.client.Dispatch("Excel.Application")


presentation=PowerPoint.Presentations.Add(True)
workbook=Excel.Workbooks.Open(Filename="C:\\.........\\workbook_with_charts.xlsx",ReadOnly=1,UpdateLinks=False)

for ws in workbook.Worksheets:
    for chart in ws.ChartObjects():
    # Copying all the charts from excel
        chart.Activate()
        chart.Copy()  

        Slide=presentation.Slides.Add(presentation.Slides.Count+1,constants.ppLayoutBlank)
        Slide.Shapes.PasteSpecial(constants.ppPasteShape)

    # WE are going to make the title of slide the same chart title
    # This is optional 
    textbox=Slide.Shapes.AddTextbox(1,100,100,200,300)
    textbox.TextFrame.TextRange.Text=str(chart.Chart.ChartTitle.Text)

presentation.SaveAs("C:\\...........\\Final_PowerPoint.pptx")
presentation.Close()
workbook.Close()

print 'Charts Finished Copying to Powerpoint Presentation'

Excel.Quit()
PowerPoint.Quit()

Подход, к которому я склоняюсь в текущей версии python-pptx, заключается в чтении листов Excel для их данных и воссоздании диаграмм в python-pptx. Это, конечно, потребовало бы знания форматирования диаграммы и т. Д., Чтобы я мог понять, почему вы не захотите этого делать.

Импортирование диаграмм непосредственно из Excel было сделано в прошлом, см. Запрос на извлечение здесь на GitHub: https://github.com/scanny/python-pptx/pull/65

Но это потребовало большого количества операций на python-pptx и многих версий в настоящее время, так что в большинстве случаев это может быть хорошим руководством к тому, какие стратегии могут работать. Вы должны хотеть этого довольно сильно, я полагаю, пойти по этому пути:)

У меня недостаточно репутации для комментариев, но если вы столкнетесь с той же проблемой, что и @R__raki__, вы можете использовать целочисленное значение, определенное ссылкой VBA. В этом случае это будет 12.

Так что замените

Slide=presentation.Slides.Add(presentation.Slides.Count+1,constants.ppLayoutBlank)

с

Slide=presentation.Slides.Add(presentation.Slides.Count+1,12)

Подробнее см. Здесь.

Другие вопросы по тегам