Come creare e formattare vari grafici in powerpoint basati su dati excel?

Ho cercato di trovare una soluzione, sia essa una macro o una soluzione semplice, per creare e formattare grafici in una presentazione di PowerPoint. Finora non ho trovato niente che risolvesse il mio problema. L'idea è quella di fornire dati di origine da un file Excel eccellente e quindi creare diversi grafici su più diapositive PowerPoint. Cioè, un grande file excel e 10 diapositive PowerPoint, con 8 grafici individuali su each diapositiva. Ho provato questo: http://mahipalreddy.com/vba.htm#ppgraph , ma questo non ha aiutato affatto.

Come posso risolvere questo?

Questo è l'approccio che vorrei usare:

  1. Impostare i grafici inizialmente in PPT utilizzando l'Inserisci grafico.
  2. Quindi da VBA, per each grafico raccogliere i dati dal file di origine di Excel e memorizzare i dati nelle variables di arrays .
  3. Utilizzare queste variables per aggiornare i dati della serie del grafico (in alternativa aggiorna il foglio di lavoro incorporato del diagramma di PowerPoint .ChartData ).

Ci sono altri methods come utilizzare OLEobjects per colbind / incorporare, ma francamente sono un dolore da lavorare e possono causare problemi se i file sono su un'unità condivisa, se vengono spostati o rinominati, ecc.

Ecco il quadro generale che descrivo sopra.

Ciò richiederà una buona modifica alla tua estremità – ad esempio questo è configurato solo per 1 grafico su 1 diapositiva e non ho idea di come sono organizzati i tuoi dati in Excel, quindi ho messo in qualche codice dummy per mostrare come Vorrei catturare alcuni valori da Excel, ovviamente dovrai ottimizzare questa voce con una buona quantità di codice in modo che sia abbastanza dynamic per lavorare su tutti i grafici (questo può essere fatto abbastanza facilmente se i tuoi dati sono organizzati bene e tu conoscere la tua strada in giro per Excel VBA).

 Option Explicit Option Base 1 Sub GetChartDataFromXLS() Dim wbFileName As String '## full filename & path of the Excel file.' Dim oXL As Object Dim xlWB As Object Dim xlWS As Object Dim cl As Object Dim c As Long Dim shp As Shape Dim cht As Chart Dim srs As Series Dim x As Long Dim sArray() As Variant '## temporary arrays for each series, will be stored in chtData arrays.' Dim chtData() As Variant '## I would use this arrays to store several arrayss from the Excel file.' Dim s As Long wbFileName = "C:\users\david_zemens\desktop\dummy chart data.xlsx" Set oXL = CreateObject("Excel.Application") oXL.Visible = True Set xlWB = oXL.Workbooks.Open(wbFileName) '## iterate over the shapes in the slide.' For Each shp In ActivePresentation.Windows(1).Selection.SlideRange(1).Shapes '## check to see if this shape is a chart.' If shp.HasChart Then '## set the chart variable.' Set cht = shp.Chart '## clear out any existing series data in the chart' For s = cht.SeriesCollection.Count To 1 Step -1 Set srs = cht.SeriesCollection(s) srs.Delete Next '##Your code to get the chtData will go in this block:' '## Set xlWS = xlWB.Sheets(1) ' ##Modify to get the correct sheet where the data for this chart resides' '## It will probably be something like this, which ' ' iterates over some columns and collects data in to a series' ' of arrayss, stored within chtData arrays ' For x = 1 To 3 'However Many Series you need to add:' 'Assuming data series begins in column A, etc...' c = 1 For Each cl In xlWS.Range("A1:A10").Offset(0, x - 1) ReDim Preserve sArray(c) sArray(c) = cl.Value c = c + 1 Next 'ReDim Preserve the chtData arrays ReDim Preserve chtData(x) chtData(x) = sArray Next x '## End collection of the chart data. '## Expose the data sheet but minimize it to preserve updating cht.ChartData.Activate cht.ChartData.Workbook.Application.WindowState = -4140 '## Now, take that data and insert it to the chart If LBound(chtData) >= 1 Then For s = LBound(chtData) To UBound(chtData) '## Add a new series to the chart Set srs = cht.SeriesCollection.NewSeries srs.Values = chtData(s) '## Modify this line to point at the appropriate arrays from chtData' 'manipulate the other series properties here ' 'srs.Name = "whatever the series name" ' 'srs.XValues = "whatever the series value" ' '# etc... '# etc... Next 'Next series... End If '## Close the chartdata sheet. cht.ChartData.Workbook.Close End If Next oXL.ActiveWorkbook.Close oXL.Quit On Error Resume Next Set oXL = Nothing Set xlWB = Nothing Set xlWS = Nothing On Error GoTo 0 End Sub 

Questo metodo non scrive nella scheda di dati del grafico. Francamente lo vedo come un passo inutile se state creando un cruscotto a macroistruzione, non ci dovrebbe essere alcuna ragione per avere bisogno della scheda di dati, ma se ciò è necessario per qualche motivo, possiamo modificare il modo in cui la serie del grafico viene creata.

Un altro metodo consiste nell'utilizzare un plugin di grafica gratuito per PowerPoint chiamato oomfo @ http://oomfo.com

Utilizzando oomfo, è ansible creare grafici collegati a fogli Excel in diretta. Una volta che hai creato un grafico collegato all'origine dati di Excel, each volta che il foglio di lavoro di Excel viene aggiornato e la presentazione viene visualizzata, i grafici tirano automaticamente i dati più recenti. Dovrai solo accertarsi che PowerPoint abbia accesso a quel file Excel (sia locale che remoto).

Link alla documentazione di origine dati di Excel è disponibile all'indirizzo http://docs.oomfo.com/charts/1.0/contents/chart_data/data_excel.html