不确定如何从VSTO中访问在OpenXML中设置的自定义属性

我有一个项目有两个要求。 一种方法是创build一个简单的程序,将自定义属性添加到Excel以外的Excel电子表格中。 第二个要求是search,如果find,则从Excel应用程序级别的Excel加载项中提取该自定义属性。

到目前为止,我已经满足了第一个要求,并有一个程序,通过OpenXML将一些数据添加到工作簿的CustomFileProperties,如下所示:

using (var wb = SpreadsheetDocument.Open(WorkbookToRegister, true)) { Log("Finding existing properties..."); var customPropsPart = wb.CustomFilePropertiesPart; if (customPropsPart == null) { Log("No properties found, adding new part..."); customPropsPart = wb.AddCustomFilePropertiesPart(); } var props = customPropsPart.Properties; if (props == null) { props = new DocumentFormat.OpenXml.CustomProperties.Properties(); customPropsPart.Properties = props; } foreach (var prop in props.Where( prop => ((CustomDocumentProperty)prop).Name.Value == "niuVersionNumber")) { Log("Removing existing properties..."); prop.Remove(); } Log("Adding new properties,.."); var versionProp = new CustomDocumentProperty(); versionProp.FormatId = Guid.NewGuid().ToString("B"); propertyGuid = versionProp.FormatId; versionProp.Name = "niuVersionNumber"; propertyName = versionProp.Name; versionProp.VTBString = new VTBString(versionNumber); props.AppendChild(versionProp); var pid = 2; Log("Assigning IDs to properties,.."); foreach (var item in props.Cast<CustomDocumentProperty>()) { item.PropertyId = pid++; } Log("Saving..."); props.Save(); } 

正如你所看到的,代码将一个名为“niuVersionNumber”的属性添加到文件中,其值为versionNumber 。 这工作完美无瑕。

问题是第二个要求。 我一直无法弄清楚如何从VSTO API中访问这个定制属性。

我search了MSDN和interwebs,并且知道OpenXML和VSTO API文档,但是很难完全理解如何使这个工作。

任何build议或例子,将不胜感激!

问候,

感谢您的反馈,但最后问题是我的目标是错误的。 我missunderstood定制属性和自定义XML部分之间的区别。

而不是像这样定位文档的自定义属性对象:

 props = new DocumentFormat.OpenXml.CustomProperties.Properties(); 

我应该一直定位文档的自定义XML部分,如下所示:

 var customWorkBookVersionXmlPart = wb.WorkbookPart.AddCustomXmlPart("application/xml");