我在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,但是只是想知道是否有一些代码片段可以解决上述问题需要。
谢谢, 黑手党