Solución:
Después de pasar horas probando diferentes cosas, he encontrado la solución a este problema. Con suerte, ayudará a alguien a ahorrar algo de tiempo. El siguiente código copiará todos los gráficos de “workbook_with_charts.xlsx” a “Final_PowerPoint.pptx”.
Por alguna razón, que aún no he entendido, funciona mejor cuando se ejecuta este programa Python desde la terminal CMD. A veces se estropea si intenta ejecutar esto varias veces, aunque la primera ejecución suele estar bien.
Otro problema es que en la quinta línea, si establece False usando “presentation = PowerPoint.Presentations.Add (False)”, no funciona con Microsoft Office 2013, aunque tanto “True” como “False” seguirán funcionando con Microsoft Office 2010.
Sería genial si alguien pudiera aclarar estas dos cuestiones.
# 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()
El enfoque al que me inclinaría con la versión actual de python-pptx es leer las hojas de Excel para obtener sus datos y recrear los gráficos en python-pptx. Eso, por supuesto, requeriría saber cuál es el formato del gráfico, etc., por lo que podría ver por qué es posible que no desee hacer eso.
La importación de gráficos directamente desde Excel se ha realizado en el pasado, consulte la solicitud de extracción aquí en GitHub: https://github.com/scanny/python-pptx/pull/65
Pero implicó una gran cantidad de cirugía en python-pptx, y muchas versiones hasta ahora, por lo que, como mucho, podría ser una buena guía sobre qué estrategias podrían funcionar. Tendrías que quererlo bastante, supongo que ir por ese camino 🙂