2010-10-20 7 views
8

Ho bisogno di inserire o modificare a livello di programmazione un grafico a torta in un documento Word 2007, utilizzando vs 2010, C# ... tutto ciò che ho trovato mostra come mettere questi vecchi grafici brutti in una parola doc. quindi mi sto chiedendo se è persino possibile manipolare i grafici più nuovi e più belli.Come inserisco o modifica un grafico a torta in un documento Word 2007, utilizzando vs 2010, C#?

Questo mostra come fare solo quello che voglio, solo che è i vecchi brutti classifiche .... http://msdn.microsoft.com/en-us/library/ms178766.aspx. Ti dice di inserire un oggetto OLE, ed è l'antica roba di msgraph.chart.8.

Sono stato in grado di fare tutto quello che devo fare se non utilizzare lo stile più recente di grafici.

Ecco un po 'del codice. Ho creato un nuovo grafico a torta e ora come lo inserisco nel documento di Word? La mia classe PieChart3D si basa su questi 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 

Mi pare ho solo bisogno l'ultimo passo di iniettare nel documento. Cosa mi manca?

+0

Sei aperto all'utilizzo di OpenXML per manipolare il tuo documento di Word o la soluzione deve essere Word Automation/Interop (come nel tuo esempio)? – MikeTeeVee

risposta

1

Nessuna di queste opzioni potrà mai funzionare per voi. AddChart viene utilizzato per creare un grafico di cui Word conosce già: è necessario utilizzare uno dei tipi di grafici noti. AddOLEControl e AddOLEObject richiedono entrambi che la classe Chart sia registrata per COM. Quando chiami il metodo, crea una nuova istanza della classe e la aggiunge al modulo. Non è possibile utilizzare questi metodi per aggiungere un grafico esistente creato in C#.

Penso che la soluzione migliore è salvare il grafico in un file utilizzando il metodo SaveImage, quindi aggiungerlo al documento WORD utilizzando il metodo AddPicture. Non sarai in grado di modificare il grafico in Word, dovrai eliminarlo e aggiungerlo di nuovo, ma almeno puoi visualizzare il grafico che hai creato.

1

Ho trovato un codice di esempio.

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

In questo codice creare una parola cocument prima. Puoi impostare il suo stile nel documento word. Quindi è possibile aggiornare il grafico con una sola chiamata di procedura. spero che sia d'aiuto.

+0

Attualmente sta ancora utilizzando i grafici incorporati in Word, in modo simile al metodo document.AddChart. Non penso che sarebbe possibile utilizzare questo metodo per aggiungere un tipo di grafico personalizzato, come il tipo PieChart3d che l'OP sta utilizzando. –

+1

Sì, OpenXML è ciò che è necessario leggere per creare e modificare documenti di Office 2007+. Suggerisco di scaricare l'SDK OpenXML da Microsoft: http://www.microsoft.com/en-us/download/details.aspx?id=5124. Ecco un altro codice di esempio per creare e lavorare con i documenti: http://www.codeproject.com/Articles/36694/Creation-of-a-Word-2007-document-using-the-Open-XM –

Problemi correlati