Диаграммы из Excel в PowerPoint с Python

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

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

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

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

2 ответов


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

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

другая проблема заключается в том, что в пятой строке, если вы сделаете False, используя "presentation=PowerPoint.Представленные доклада.Добавить (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 был сделан в прошлом, см. запрос pull здесь, на GitHub:https://github.com/scanny/python-pptx/pull/65

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