2012-04-21 143 views
0

我有一個具有圖表(條形圖)的Excel文件。我還有一張幻燈片,包含3張幻燈片。請注意,Powerpoint幻燈片上的Excel表格上沒有圖表「標題」。我需要使用Excel文件中的圖表更新幻燈片#2中的圖表。如何使用Excel圖表更新PowerPoint幻燈片

請注意,我已經搜索了這個論壇,我發現的是創建新幻燈片的方法以及使用標題更新圖表的方法。

任何幫助將不勝感激。感謝您的時間

編輯:您的解決方案是好的,但不幫助我如何更換特定幻燈片中的圖表。在我的問題中,我已經說過有3張幻燈片。我想專門更新幻燈片2中的圖表。沒有圖表標題,因此我需要根據幻燈片編號查找要替換的圖表。這是如何完成的?再次感謝。

回答

1

這可以通過以下步驟來完成:(注:在PowerPoint中的目標,和Excel是源)

  1. 打開目標並找到ChartPart要替換。保留對ChartPart所在的父SlidePart的引用,並將ChartPart的RelationshipId複製到SlidePart,然後從目標中刪除ChartPart。
  2. 保存源文件並保持打開狀態。

     foreach (var slidePart in targetPPT.PresentationPart.SlideParts) 
         { 
          if (slidePart.ChartParts.Any()) 
          { 
           slidePartBookMark = slidePart; 
    
           var chartPart = slidePart.ChartParts.First(); 
           chartPartIdBookMark = slidePart.GetIdOfPart(chartPart); 
           slidePart.DeletePart(chartPart); 
           slidePart.Slide.Save(); 
           return; 
          } 
         } 
    
  3. 打開源並找到要複製到目標的ChartPart。它將位於源代碼某處的WorksheetPart的Drawings部分。保留對ChartPart的引用並保持文件處於打開狀態。

     foreach (var worksheetPart in sourceXls.WorkbookPart.WorksheetParts) 
         { 
          if (worksheetPart.DrawingsPart != null) 
           if (worksheetPart.DrawingsPart.ChartParts.Any()) 
           { 
            saveXlsChart = worksheetPart.DrawingsPart.ChartParts.First(); 
            return; 
           } 
    
         } 
    
  4. 在從步驟1中的SlidePart參考,使用RelationshipId

    var newChartPart = slidePartBookMark.AddNewPart<ChartPart>(chartPartIdBookMark); 
    
  5. 複印在步驟創建的源圖表的新chartpart內容創建與AddNewPart呼叫的新ChartPart 4與FeedData/GetStream的想法發現here。保存幻燈片並關閉文件。

    newChartPart.FeedData(saveXlsChart.GetStream()); 
        slidePartBookMark.Slide.Save(); 
        sourceXls.Close(); 
        targetPPT.Close(); 
    

我能得到它用一個簡單的源/目標只包含每一個圖表工作。如果你的文件更復雜,你的定位邏輯將不止是First()。

希望這會有所幫助。

+0

感謝您抽出時間。我會嘗試這個解決方案並回復你 – 2012-04-23 03:45:21

+0

我看着你的解決方案。我真正需要的是能夠去一個特定的幻燈片。在我的問題中,我已經說過我想要替換幻燈片2中的圖表。這將有助於瞭解這是如何完成的 – 2012-04-23 04:41:06

+0

如果您在演示文稿中只有一個圖表,上面的工作將會起作用。如果您只需要第二張幻燈片,請在步驟2下面的第一行代碼中嘗試var secondSlidePart = targetPPT.PresentationPart.SlideParts.Skip(1).Take(1)。同時刪除它下面的if語句。 – Taterhead 2012-04-23 07:11:17

相關問題