我有一个有两个要求的项目。一种是创建一个简单的程序,从Excel外部向Excel电子表格添加自定义属性。第二个要求是搜索,如果找到,则从应用程序级别vsto 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();
}
如您所见,代码会在文件中添加一个名为&#34; niuVersionNumber&#34; 的属性,其值为 versionNumber 。这完美无缺。
问题是第二个要求。我还没有能够弄清楚如何从VSTO API中访问该自定义属性。
我已经搜索过MSDN和互联网,并且知道OpenXML和VSTO API文档,但我很难完全理解如何让它工作。
任何建议或示例都将不胜感激!
此致
乔
答案 0 :(得分:1)
感谢您的反馈,但最终问题是我的目标是错误的对象。我错过了自定义属性和自定义xml部分之间的区别。
而不是像这样定位文档的自定义属性对象:
props = new DocumentFormat.OpenXml.CustomProperties.Properties();
我应该像这样定位文档的自定义xml部分:
var customWorkBookVersionXmlPart = wb.WorkbookPart.AddCustomXmlPart("application/xml");