我有一个带有图表(条形图)的Excel文件。我还有一个包含3张幻灯片的Powerpoint演示文稿。请注意,Powerpoint幻灯片上的Excel表格上没有图表“标题”。我需要使用excel文件中的图表更新幻灯片#2中的图表。
请注意,我搜索了这个论坛,我发现的是创建新幻灯片以及使用tittle更新图表的方法。
任何帮助将不胜感激。谢谢你的时间
编辑:你的解决方案很好,但对于如何替换特定幻灯片中的图表没有帮助。在我的问题中,我已经说过有3张幻灯片。我想专门更新幻灯片2中的图表。没有图表标题所以我需要根据幻灯片编号找到要替换的图表。这是怎么做到的?再次感谢。
答案 0 :(得分:1)
这可以通过以下步骤来完成:(注意:powerpoint是目标,而excel是源)
保存来源并保持文件打开。
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;
}
}
打开源并找到要复制到目标的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;
}
}
在步骤1的SlidePart参考中,使用RelationshipId创建一个带有AddNewPart调用的新ChartPart
var newChartPart = slidePartBookMark.AddNewPart<ChartPart>(chartPartIdBookMark);
将源图表的内容复制到您在步骤4中创建的新图表部分,其中找到FeedData / GetStream构思here。保存幻灯片,然后关闭文件。
newChartPart.FeedData(saveXlsChart.GetStream());
slidePartBookMark.Slide.Save();
sourceXls.Close();
targetPPT.Close();
我能够使用一个只包含一个图表的简单源/目标。如果您的文件更复杂,您的定位逻辑将不仅仅是First()。
希望这有帮助。