2010-12-03 5 views
1

J'ai un problème avec l'intégration d'un graphique Excel dans PowerPoint via l'API Interop en utilisant C#. J'ai besoin de faire fonctionner cela pour Office2003.Export Excel Chart dans l'exportation PowerPoint

Le processus que je suis est que je crée un PowerPoint à partir d'un modèle en utilisant l'API interop. Ensuite, j'insère une nouvelle diapositive pour chaque graphique, et sur ces diapositives, j'ajoute un objet OLE Excel.Chart. Tout va bien jusqu'ici. Ensuite, je vais dans ce classeur, modifier les données et utiliser le ChartWizard pour mettre à jour le graphique sur la première feuille. Enfin, je ferme le classeur Excel.

Le problème est que le graphique ne s'affiche pas correctement dans les diapositives PowerPoint générées. Le graphique est adapté aux données modifiées, mais toutes les actions sur le graphique lui-même, telles que la modification du titre, de la plage de données, du type de graphique , etc. ne sont pas affichées.

Il devient plus étrange. Lorsque dans PowerPoint, cliquez sur le graphique généré (incorrectement) généré et choisissez ouvrir ou modifier, le graphique sera actualiser immédiatement à les paramètres corrects. Lorsque je ferme ensuite le graphique et que je reviens à PowerPoint, le graphique est rendu correctement.

J'ai passé des heures et des heures à comprendre ce qui se passe, mais d'une manière ou d'une autre, rien ne semble fonctionner. J'ai essayé d'appeler:

  • PowerPoint.Application.ActivePresenation.UpdateLinks() après toutes les cartes sont générées (est-il un problème OLE?).
  • Chart.Refresh();
  • Workbook.RefreshAll();

Est-ce que quelqu'un pourrait me donner un indice sur ce qui doit être fait? Je vais poster mon code qui insère les graphiques ci-dessous.

//Add the Workbook 
Excel.Workbook workbook = 
(Excel.Workbook)slide.Shapes.AddOLEObject(basePoint.X, basePoint.Y, 
chartSize.Width, chartSize.Height, 
MsoTriState.msoFalse).OLEFormat.Object; 

//update the worksheet with data 
Excel.Worksheet datasheet = 
(Excel.Worksheet)workbook.Worksheets["Sheet1"]; 
datasheet.Cells.ClearContents(); 

//set table contents 
//<<SNIP code that fills data sheet with contents from our custom 
dataTable object>> 

//fetch chart 
Excel.Chart chart = (Excel.Chart)workbook.Charts["Chart1"]; 
Excel.Range range = datasheet.get_Range(datasheet.Cells[1, 1], 
datasheet.Cells[dataTable.RowCount + 1, dataTable.ColumnCount + 1]); 
chart.ChartWizard(range, Excel.XlChartType.xlBarStacked, Type.Missing, 
Excel.XlRowCol.xlRows, 1, 1, true, dataTable.ChartTitle, "", "", ""); 

//release objects 
datasheet = null; 
chart = null; 
range = null; 
workbook.Close(false, Type.Missing, Type.Missing); 
workbook = null; 
+0

Avez-vous déjà eu ce travail? – DannyT

Répondre

1

Cela semblait fonctionner pour moi lorsque la mise à jour d'un graphique existant:

Chart.Application.Update(); 

Je serais curieux de voir si cela fonctionne pour vous en insérant un nouveau tableau.