在OpenXML中检索图表的标签

时间:2018-07-05 07:44:36

标签: c# charts powerpoint openxml openxml-sdk

我在PowerPoint 2016中的幻灯片上有一个图表,并已使用Microsoft.Interop程序集(Ref)向图表中添加了一些自定义标签

当我使用Open XML SDK 2.5生产力工具检查PPTX文件时,它会将所有用于Presentation,Slide或Shape的标签添加到Slide范围中(图表属于此类别)。我通过this论坛确认了此行为。

但是,我很难使用OpenXML SDK通过唯一的标识符(作为标签添加到图表中)来识别图表和幻灯片之间的关系。

我能够从SlidePart(幻灯片)中检测到ChartParts(图表),但是无法检测到特定的图表来为Series设置相关值。

这是我的代码的一部分,试图检索ChartPart:

using (PresentationDocument document = PresentationDocument.Open("E:\\Test\\ClustedChart.pptx", true))
                {
                    document.GetIdOfPart(document.PresentationPart);

                    int slideCount = document.PresentationPart.GetPartsOfType<SlidePart>().Count();

                    for (int i = 0; i < slideCount; i++)
                    {
                        SlidePart slidePart = document.PresentationPart.GetPartsOfType<SlidePart>().ElementAt(i);
       //The following code retrieves all the tags from Presentation, Slide and Shapes
          TagList tagList = null;
          Dictionary<string, string> sldTags = new Dictionary<string,string>();

                foreach (var tagPart in slidePart.UserDefinedTagsParts)
                {
                    tagList = tagPart.TagList;
                    bool tagFound = false;
                    foreach (DocumentFormat.OpenXml.Presentation.Tag tag in tagList.ChildElements)
                    {
                        if (!sldTags.ContainsKey(tag.Name.ToString()))
                            sldTags.Add(tag.Name.ToString(), tag.Val.ToString());
                    }
                }

                        int ChartCount = slidePart.ChartParts.Count();
                        for (int m = 0; m < ChartCount; m++)
                        {
//This is the place I am struggling to detect the relevant Chart.
                            ChartPart chartPart = slidePart.ChartParts.ElementAt(m);

                             C.BarChart BarChart1 = chartPart.ChartSpace.Descendants<C.BarChart>().FirstOrDefault();
                        }
                    }
                }

我已经通过Open XML SDK 2.5生产力工具的生成代码看到了PresentationML的结构,似乎传递了一些RelationshipId,但是只是想知道是否有一些代码片段可以解决上述问题需要。

谢谢, 黑手党

0 个答案:

没有答案