从ChartReference获取ChartSpace

时间:2013-05-14 11:44:05

标签: ms-office powerpoint openxml-sdk

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

我已经获得了包含Chart的GraphicFrame,并且我得到了我想要修改的ChartSpace Element的相对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) ;
}

2 个答案:

答案 0 :(得分:1)

不确定这是否对您有所帮助,但我在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();

        }

目前我还在试图弄清楚如何检索位于给定富文本控件中的图表(使用它的标记名称)。上面的方法有效,但我对此并不满意。

无论如何,祝你找到问题的解决方案好运!

答案 1 :(得分:1)

克里斯蒂安,如果你还在寻找答案:我能找到一个问题。我认为它也可能对你有用。

请参阅帖子“Finding a graph part within a rich text control with OpenXML SDK”。

祝你好运!