Ms office 从ChartReference获取ChartSpace

Ms office 从ChartReference获取ChartSpace,ms-office,powerpoint,openxml-sdk,Ms Office,Powerpoint,Openxml Sdk,我尝试修改PowerPoint幻灯片,其中包含两个图表。我的目标是找到图表并修改其数据 我已经得到了包含图表的GraphicFrame,并且得到了要修改的ChartSpace元素的相对ID。但是如何获得actucal ChartSpace元素呢 public void test() { //// getting the SlidePart var slidepart = presPart.GetPartById(relId) as SlidePart; //// g

我尝试修改PowerPoint幻灯片,其中包含两个图表。我的目标是找到图表并修改其数据

我已经得到了包含图表的GraphicFrame,并且得到了要修改的ChartSpace元素的相对ID。但是如何获得actucal ChartSpace元素呢

 public void test()
{
    //// getting the SlidePart
      var slidepart = presPart.GetPartById(relId) as SlidePart;
    //// getting the Shape which contains the damned Chart
    var graphicFrame = GetGraphicFrameFromSlide(slidepart, ppChart, ppSlide);
    //// get the ChartReference
    DrawCharts.ChartReference child = GraphicFrame.Graphic.GraphicData.GetFirstChild<DrawCharts.ChartReference>();
                                var chartID = child.Id;
    //// this returns a ExtendedSomething, but no chart reference :(
                               var chartData = presDoc.GetPartById(chartID) ;
}
公共无效测试()
{
////获取幻灯片部件
var slidepart=presPart.GetPartById(relId)作为slidepart;
////获取包含该死图表的形状
var graphicFrame=GetGraphicFrameFromSlide(slidepart、ppChart、ppSlide);
////获取图表参考
DrawCharts.ChartReference child=GraphicFrame.Graphic.GraphicData.GetFirstChild();
var chartID=child.Id;
////这将返回ExtendedSomething,但不返回图表引用:(
var chartData=presDoc.GetPartById(chartID);
}

不确定这是否对您有帮助,但我正在Word文档中做类似的事情:

        foreach (ChartPart chartPart in mainDocumentPart.ChartParts)
        {
            Chart chart = chartPart.ChartSpace.Elements<Chart>().FirstOrDefault();

            if (chart != null)
            {

                DocumentFormat.OpenXml.Drawing.Charts.LineChart lineChart = chart.Descendants<DocumentFormat.OpenXml.Drawing.Charts.LineChart>().FirstOrDefault();

                if (lineChart != null)
                {
                    i++;

                    LineChartEx chartEx = new LineChartEx(chartPart, myChartData));
                    chartEx.Refresh();
                }
            }

            chartPart.ChartSpace.Save();

        }
foreach(mainDocumentPart.ChartParts中的ChartPart ChartPart)
{
Chart Chart=chartPart.ChartSpace.Elements().FirstOrDefault();
如果(图表!=null)
{
DocumentFormat.OpenXml.Drawing.Charts.LineChart LineChart=chart.subjects().FirstOrDefault();
如果(折线图!=null)
{
i++;
LineChartEx chartEx=新的LineChartEx(chartPart,myChartData));
chartEx.Refresh();
}
}
chartPart.ChartSpace.Save();
}
目前,我仍在试图找出如何检索驻留在给定富文本控件中的图表(使用它的标记名)。上述方法有效,但我并不完全满意


不管怎样,祝你好运找到解决你问题的办法

Christian,如果你还在寻找答案的话:我能为我的问题找到答案。我想这可能对你也有用

请参阅“发布”


祝你好运

谢谢,。这看起来非常类似于我自己的方法,我今天构建的方法。很好,我的逻辑不完全符合标记:)作为一个建议:您可以给命名别名,如:Draw=DocumentFormat.OpenXml.Drawing;这将大大缩短您的查询时间。