2010-10-20 8 views
8

J'ai besoin d'insérer ou de modifier par programmation un camembert dans un document Word 2007, en utilisant vs 2010, C# ... tout ce que j'ai trouvé montre comment mettre ces vieux tableaux laids dans un document Word. donc je me demande maintenant s'il est même possible de manipuler les cartes les plus récentes et les plus belles.Comment insérer ou modifier par programme un graphique à secteurs dans un document Word 2007, en utilisant vs 2010, C#?

Celui-ci montre comment faire juste ce que je veux, seulement c'est les vieux graphiques laids .... http://msdn.microsoft.com/en-us/library/ms178766.aspx. Il vous dit d'insérer un objet OLE, et ce sont les anciens éléments de msgraph.chart.8.

J'ai été capable de faire tout ce que j'ai besoin de faire, sauf utiliser le nouveau style de cartes.

Voici une partie du code. J'ai construit un nouveau graphique à secteurs et maintenant comment l'insérer dans le document Word? Ma classe PieChart3D est basée sur ces http://code.msdn.microsoft.com/mschart

// here's my c#.net 

private void CreateChart(string title, Microsoft.Office.Interop.Word.Application oWord, Microsoft.Office.Interop.Word.Document oDoc, ChartType chartType, Hashtable values) 
{ 
    PieChart3D chart1 = new PieChart3D(); // using System.Windows.Forms.DataVisualization.Charting 
    chart1.PieChart3D_Load(values); 

    object oMissing = System.Reflection.Missing.Value; 
    object oEndOfDoc = "\\endofdoc"; /* \endofdoc is a predefined bookmark */ 
    Microsoft.Office.Interop.Word.Range wrdRng = oDoc.Bookmarks.get_Item(ref oEndOfDoc).Range; 

    // None of these work!!!! 
    wrdRng.InlineShapes.AddOLEControl(chart1); 
    wrdRng.InlineShapes.AddChart(chart1); 
    wrdRng.InlineShapes.AddOLEObject(chart1); 

    return; 
} 

// done with code 

Il me semble que je ne dois la dernière étape d'injection dans le document. Qu'est-ce que je rate?

+0

Êtes-vous ouvert à l'utilisation d'OpenXML pour manipuler votre document Word ou doit-il être Word Automation/Interop (comme vous le montrez dans votre exemple)? – MikeTeeVee

Répondre

1

Aucune de ces options sera effectivement travailler pour vous. AddChart est utilisé pour créer un graphique que Word connaît déjà - vous devez utiliser l'un des types de graphiques connus. AddOLEControl et AddOLEObject requièrent tous deux que votre classe Chart soit enregistrée pour COM. Lorsque vous appelez la méthode, elle crée une nouvelle instance de la classe et l'ajoute au formulaire. Vous ne pouvez pas utiliser ces méthodes pour ajouter un graphique existant que vous avez créé en C#.

Je pense que votre meilleur pari est de sauvegarder votre graphique dans un fichier en utilisant la méthode SaveImage, puis de l'ajouter à votre document WORD en utilisant la méthode AddPicture. Vous ne serez pas en mesure de modifier le graphique dans Word, vous devrez le supprimer et le rajouter, mais au moins vous pouvez afficher le graphique que vous avez créé.

1

J'ai trouvé un exemple de code.

http://www.codeproject.com/Articles/188909/Updating-Charts-in-Word-Document-using-OpenXML

Dans ce code créer un mot cocument premier. Vous pouvez définir son style dans le document Word. Ensuite, vous pouvez mettre à jour le graphique avec un seul appel de procédure. J'espère que cela aide.

+0

Ceci utilise toujours les graphiques intégrés à Word, similaires à la méthode document.AddChart. Je ne pense pas qu'il serait possible d'utiliser cette méthode pour ajouter un type de graphique personnalisé, comme le type PieChart3d que l'OP utilise. –

+1

Oui, OpenXML est ce que vous devez lire pour créer et modifier des documents Office 2007+. Je suggère de télécharger le SDK OpenXML à partir de Microsoft: http://www.microsoft.com/en-us/download/details.aspx?id=5124. Voici quelques exemples de code pour créer et travailler avec des documents: http://www.codeproject.com/Articles/36694/Creation-of-a-Word-2007-document-using-the-Open-XM –

Questions connexes