Не знаете, как получить доступ к пользовательским свойствам, установленным в OpenXML, из VSTO.

У меня есть проект, который имеет два требования. Один из них — создать простую программу, которая добавляет пользовательское свойство в электронную таблицу Excel из-за пределов Excel. Второе требование заключается в поиске и, если найдено, извлечении этого пользовательского свойства из надстройки уровня приложения или надстройки Excel.

Пока я выполнил первое требование и имею программу, которая добавляет некоторые данные в CustomFileProperties книги через OpenXML следующим образом:

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.

Я искал в MSDN и в Интернете и знаю документацию по API OpenXML и VSTO, но мне трудно полностью понять, как заставить это работать.

Любые предложения или примеры будут оценены!

С уважением,

Джо


person Joe    schedule 21.03.2014    source источник


Ответы (1)


Спасибо за ваш отзыв, но, в конце концов, проблема заключалась в том, что я нацелился не на тот объект. Я неправильно понял разницу между пользовательскими свойствами и пользовательскими частями xml.

Вместо того, чтобы ориентироваться на объект настраиваемых свойств документа, например:

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

Я должен был ориентироваться на пользовательские части xml документа, например:

var customWorkBookVersionXmlPart = wb.WorkbookPart.AddCustomXmlPart("application/xml");
person Joe    schedule 10.04.2014