2017-07-10 1 views
0

Ich habe eine VSTO addin, die ein Excel-Diagramm (in Byte-Array) über ein Netzwerk von einem Server empfängt. Ich möchte dieses Diagramm programmatisch in eine PowerPoint-Folie einfügen, ohne das Diagramm zuerst auf der Festplatte speichern zu müssen.Wie kann man ein Excel-Diagramm direkt aus dem Speicher auf eine PowerPoint-Folie einbetten?

Allerdings, wenn ich durch alle .Add* methods exposed by Microsoft.Office.Interop.PowerPoint.Shapes schaue, scheinen sie alle einen Dateipfad in string erfordern. Mit anderen Worten, ich müsste die Binärdaten in eine Datei in einem unterstützten Format auf dem System konvertieren und den Pfad abrufen, bevor ich diese Funktionen verwenden kann.

Gibt es eine Möglichkeit, diese Binärdaten direkt zu verwenden und sie auf der PowerPoint-Folie einzufügen, ohne sie zuerst als Datei auf dem System speichern zu müssen?

+0

Ihre Frage zu dem Einfügen ist Diagramm, warum Binärdaten wichtig sind? Wenn die Daten aus einem Textformat stammen, können Sie Ihre Aufgabe problemlos erledigen? –

+0

@ LeiYang binäre Daten wichtig, weil das ist das Format des Diagramms, das meine App über das Netzwerk über TCP-Protokoll von einer anderen Anwendung erhalten. Auch wenn es sich um ein Textformat handelt, würde ich immer noch Schwierigkeiten haben, es direkt auf die Folie einzufügen, da alle Methoden, die auf Powerpoint-Folie eingebettet werden, nur den * Pfad der Datei akzeptieren in string * - nicht die Datei selbst - als Parameter für den Zugriff auf die erforderliche Datei ... wenn ich mich nicht irre. – Mark

+0

so eigentlich brauchen Sie nicht den Datenquellentyp in dieser Frage zu betonen. Dein größtes Problem liegt woanders. –

Antwort

0
using Microsoft.Office.Interop.Excel; 

void CreateChart() 
{ 
    ChartData gChartData; 
    Workbook gWorkBook; 
    Worksheet gWorkSheet; 
    // Create the chart and set a reference to the chart data. 
    var myChart = ActivePresentation.Slides[1].Shapes.AddChart() as Microsoft.Office.Interop.PowerPoint.Chart; 
    gChartData = myChart.ChartData; 
    // Set the Workbook and Worksheet references. 
    gWorkBook = gChartData.Workbook; 
    gWorkSheet = gWorkBook.Worksheets[1]; 
    // Add the data to the workbook. 
    gWorkSheet.ListObjects["Table1"].Resize(gWorkSheet.Range["A1:B5"]); 

    gWorkSheet.Range["Table1[[#Headers],[Series 1]]"].Value = "Items"; 

    gWorkSheet.Range["a2"].Value = "Coffee"; 
    gWorkSheet.Range["a3"].Value = "Soda"; 
    gWorkSheet.Range["a4"].Value = "Tea"; 
    gWorkSheet.Range["a5"].Value = "Water"; 
    gWorkSheet.Range["b2"].Value = "1000"; 
    gWorkSheet.Range["b3"].Value = "2500"; 
    gWorkSheet.Range["b4"].Value = "4000"; 
    gWorkSheet.Range["b5"].Value = "3000"; 

    //ToDo: Style 
} 

die Daten füllen, wie Sie möchten (Sie es mit einer for-Schleife füllen kann und füllen Sie die $"a{i}" Spalte mit der Nummer des Eintrags (i))

See this Article for further Information

Verwandte Themen