我正在使用VS 2012中的c#创建PowerPoint 2010加载项。 我在每个演示文稿中插入一个XML文件。此XML包含一些重要的幻灯片相关数据,必须在打开新演示文稿后读取这些数据。我按以下方式添加自定义XML。
Office.CustomXMLPart xmlPart;
string xmlString = "<?xml version='1.0' ?>" +
"<data xmlns:c='charts'>" +
"<c:Chart>" +
"<c:ChartType>MyChartType</c:ChartType>" +
"<c:ChartID>" + pShape.Id + "</c:ChartID>" +
"</c:Chart>" +
"</data>";
xmlPart = presentation.CustomXMLParts.Add(xmlString, missing);
现在,每当新的演示文稿打开时,我都必须阅读此自定义XML,并检查ChartType = "MyChartType"
是否正确。以下是AfterPresentationOpen
事件的代码。
void pptAPP_AfterPresentationOpen(PowerPoint.Presentation Pres)
{
foreach (PowerPoint.Shape shapeItem in Pres.Windows[1].Selection.SlideRange.Shapes)
{
if (shapeItem.HasChart == Office.MsoTriState.msoTrue)
{
**customXMLPart = Pres.CustomXMLParts[0]**; //My XML is at this index
customXMLNode = customXMLPart.SelectSingleNode("//Chart/ChartType");
}
}
}
理论上说这应该可行。但是当我运行代码时,编译器给了我这个操作失败,因为在事件期间做出的一个或多个更改是无效的。 **行的异常。
更新
在使用Pres.CustomXMLParts[1]
,Pres.CustomXMLParts[2]
等运行代码时,没有此类异常。
答案 0 :(得分:1)
这是一篇旧帖子,但是我在google相同的错误消息时到了这里。 阅读这篇文章后,它打击了我,excel有使用1作为第一个索引的方式,而不是我们都知道和喜欢的基于零的索引:)。
因此,在您的更新中,您提到使用Pres.CustomXMLParts [1]和Pres.CustomXMLParts [2]运行代码可以正常工作,因为您使用的索引大于0。
您的图表数据应该位于其中一个部分。