2015-09-17 20 views
6

Ho una cartella di lavoro excel che viene creata utilizzando un eccellente modulo "xlsxwriter". In questa cartella di lavoro, ci sono circa 200 grafici incorporati. Ora sto cercando di esportare tutti quei grafici in diverse presentazioni in power point. Idealmente, voglio conservare il formato originale e i dati incorporati senza collegarmi a un libro di lavoro Excel esterno.Grafici da Excel a PowerPoint con Python

Sono sicuro che c'è un modo per farlo usando VBA. Ma mi stavo chiedendo se c'è un modo per farlo usando Python. C'è un modo per mettere gli oggetti grafici xlsxwriter in powerpoint?

Ho dato un'occhiata a python-pptx e non riesco a trovare nulla su come ottenere grafici o serie di dati dal libro di lavoro di Excel.

Qualsiasi aiuto è apprezzato!

+0

Si può provare OprnPyXl di leggere il grafico dal file di Excel, che credo che esso sostiene, scrivere in un buffer di file e quindi aggiungere a PowerPoint. EDIT: 0penPyXl non supporta ancora la lettura di grafici quindi dubito che questo sia possibile in Python. –

risposta

3

Dopo aver passato ore a provare cose diverse, ho trovato la soluzione a questo problema. Speriamo che aiuti qualcuno a risparmiare tempo. Il seguente codice copierà tutti i grafici da "workbook_with_charts.xlsx" a "Final_PowerPoint.pptx".

Per qualche ragione, che devo ancora capire, funziona meglio quando si esegue questo programma Python dal terminale CMD. A volte si rompe se si tenta di eseguirlo più volte, anche se la prima esecuzione di solito è OK.

Un altro problema è che nella quinta riga, se si attiva False utilizzando "presentation = PowerPoint.Presentations.Add (False)", non funziona con Microsoft Office 2013, anche se sia "True" che "False" funzionerà ancora con Microsoft Office 2010.

Sarebbe bello se qualcuno potesse chiarire questi due problemi.

# 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() 
3

L'approccio a cui sarei propenso con la versione attuale di python-pptx è leggere i fogli di Excel per i loro dati e ricreare i grafici in python-pptx. Ciò ovviamente richiederebbe sapere quale sia la formattazione del grafico, ecc., Così ho potuto capire perché non si potrebbe voler farlo.

Importazione di grafici direttamente da Excel è stato fatto in passato, vedere la richiesta di pull qui su GitHub: https://github.com/scanny/python-pptx/pull/65

Ma coinvolto una grande quantità di un intervento chirurgico su python-pptx, e molte versioni indietro, quindi a la maggior parte potrebbe essere una buona guida su quali strategie potrebbero funzionare. Dovresti volerlo piuttosto male, suppongo di seguire questa strada :)

+0

Ciao Scanny, grazie per la tua risposta. Non mi dispiacerà ricreare i grafici con python-pptx anche se dubito che python-pptx offra lo stesso livello di sofisticazione in termini di grafici come "xlsxwriter". Inoltre, non riesco a trovare alcun esempio di lettura dei dati del foglio excel da python-pptx. Si prega di condividere se ne avete. – user3817518

+0

È necessario utilizzare un altro pacchetto per leggere i dati di Excel. Stavo pensando che usare xlsxwriter fosse un'opzione, dato che è importato comunque da python-pptx, ma ricorda ora che non funziona per la lettura. Dovrebbe essere uno degli altri pacchetti di Excel che suppongo, o forse esportare come CSV. – scanny

+0

Hi @scanny sono grafici impilati, grafici a barre orizzontali e grafici ad area che arrivano alle funzionalità di creazione di grafici di python-pptx in qualsiasi momento? – vagabond

Problemi correlati