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

时间:2014-03-21 18:51:44

标签: c# excel vsto openxml

我有一个有两个要求的项目。一种是创建一个简单的程序,从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文档,但我很难完全理解如何让它工作。

任何建议或示例都将不胜感激!

此致

1 个答案:

答案 0 :(得分:1)

感谢您的反馈,但最终问题是我的目标是错误的对象。我错过了自定义属性和自定义xml部分之间的区别。

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

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

我应该像这样定位文档的自定义xml部分:

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