0

我有一个带有图表(条形图)的 Excel 文件。我还有一个带有 3 张幻灯片的 Powerpoint 演示文稿。请注意,在 Excel 表格或 Powerpoint 幻灯片上都没有图表“标题”。我需要使用 excel 文件中的图表更新幻灯片 #2 中的图表。

请注意,我已经搜索了这个论坛,我发现了创建新幻灯片以及使用标题更新图表的方法。

任何帮助将不胜感激。谢谢你的时间

编辑:您的解决方案很好,但对如何替换特定幻灯片中的图表没有帮助。在我的问题中,我已经说过有 3 张幻灯片。我想专门更新幻灯片 2 中的图表。没有图表标题,所以我需要根据幻灯片编号找到要替换的图表。这是怎么做的?再次感谢。

4

1 回答 1

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 的 DrawingsPart 中。保留对 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 创建一个新的 ChartPart 并调用 AddNewPart

        var newChartPart = slidePartBookMark.AddNewPart<ChartPart>(chartPartIdBookMark);
    
  5. 将源图表的内容复制到您在第 4 步中创建的新图表部分,其中包含此处的 FeedData/GetStream 想法。保存幻灯片,然后关闭文件。

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

我能够让它与一个简单的源/目标一起工作,每个源/目标只包含一个图表。如果您的文件更复杂,您的定位逻辑将不仅仅是 First()。

希望这可以帮助。

于 2012-04-22T22:11:34.933 回答