2017-07-10 43 views
0

我有一個VSTO addin從服務器通過網絡接收excel圖表(字節數組)。我想將此圖表以編程方式粘貼到PowerPoint幻燈片上,而無需先將圖表保存到磁盤。如何直接將Excel圖表從內存中嵌入PowerPoint幻燈片中?

但是,當我瀏覽所有.Add* methods exposed by Microsoft.Office.Interop.PowerPoint.Shapes時,它們似乎都需要string中的文件路徑。換句話說,我必須將二進制數據轉換爲系統上受支持格式的文件,並在使用這些函數之前先獲取它的路徑。

有沒有什麼方法可以直接使用這個二進制數據並將其粘貼到PowerPoint幻燈片上,而不必先將它作爲文件保存在系統上?

+0

你的問題是關於粘貼圖表爲什麼二進制數據很重要?如果數據來自某種文本格式,您是否可以輕鬆完成您的任務? –

+0

@LeiYang二進制數據很重要,因爲這是我的應用程序通過另一個應用程序通過TCP協議通過網絡接收的圖表格式。即使它是文本格式,我仍然無法將其直接粘貼到幻燈片上,因爲所有嵌入幻燈片中的方法都是由'Microsoft.Office.Interop.PowerPoint.Shapes'公開的,它只接受文件的*路徑在字符串* - 不是文件本身 - 作爲其參數來訪問所需的文件...如果我沒有錯。 – Mark

+0

所以實際上你不需要在這個問題中強調數據源類型。你最大的問題在別的地方。 –

回答

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 
} 

填充數據爲你喜歡的(你可以用填充它的循環,並與進入的數(i)填補$"a{i}"列)

See this Article for further Information

相關問題