2017-08-14 128 views
0

我有一個Excel工作簿裏面有多個圖表。我創建了一個for循環來獲取每張表中的圖表。這工作沒有錯誤。Excel/Powerpoint Office Interop - 從Excel表格複製圖表到PowerPoint幻燈片

我遇到的問題是我無法導入多個圖表,只有一個圖表導入爲圖片而不是圖表。

objChart.Copy(); 

完整的錯誤:

當我嘗試導入多個圖表,我在這條線得到一個COMException

An exception of type 'System.Runtime.InteropServices.COMException' occurred in mscorlib.dll but was not handled in user code 

Additional information: Exception from HRESULT: 0x800A03EC 

這裏是我的全部方法:

public int ImportExcelChartsFromWorkbookToSlides(int startingSlideIndex, string workbookPath, string[] slideTitles) 
{ 
    int slideIndex = startingSlideIndex; 
    int titleIndex = 0; 
    EXCL.Application objExclApp = new EXCL.Application(); 
    EXCL.Workbook objWorkbook = objExclApp.Workbooks.Open(workbookPath, Editable: false); 
    foreach (EXCL.Worksheet objSheet in objWorkbook.Worksheets) 
    { 
     foreach (EXCL.ChartObject objChart in objSheet.ChartObjects()) 
     { 
      AddTitleOnlySlide(slideIndex); 
      SetTitleOnlySlideTitle(slideTitles[titleIndex]); 

      // Copy Chart from Sheet to Slide 
      objChart.Copy(); 

      PPT.ShapeRange objShapeRange = objSlide.Shapes.Paste(); 

      // TODO PARAMETER 
      objShapeRange.Left = 10; 
      objShapeRange.Top = 100; 

      slideIndex++; 
      titleIndex++; 
     } 
    } 
    return slideIndex; 
} 

有沒有人看到這個代碼的任何問題?

UPDATE

如果我改變這一行:

objChart.Copy(); 

這樣:

objChart.CopyPicture(); 

我沒有問題..可能是什麼造成的?

回答

0

我設法用objChart.CopyPicture();來解決這個問題,但這是causing crashes對於一些用戶,所以我落得這樣做的:

string chartPath = [email protected]"{workbookPath.Substring(0, workbookPath.LastIndexOf("\\") + 1)}{DateTime.Now.Ticks}.png"; 
objChart.Chart.Export(chartPath, "PNG", false); 
objSlide.Shapes.AddPicture2(chartPath, MsoTriState.msoFalse, MsoTriState.msoTrue, chartPosLeft, chartPosTop, compress: MsoPictureCompress.msoPictureCompressFalse); 
相關問題