Получить CustomXMLParts в Excel Addin, используя VB.NET

Мне нужна небольшая помощь для извлечения значений, хранящихся в CustomXMLPart в надстройке Excel с использованием VB.NET. Я искал и не нашел много деталей по этому вопросу. Из того, что я нашел, код, который у меня есть, должен работать. Сначала я думал, что моя XML-часть не добавляется, чтобы ее можно было сохранить между сеансами, но я отображал счетчик коллекции CustomXMLParts до (3) и после (4) добавления своей пользовательской XML-части, и количество увеличивалось на единицу. Я также отображал счет при открытии сохраненной книги Excel, и он был таким же числом (4) после добавления моего CustomXMLPart в коллекцию. Вот соответствующий код ниже. Любая помощь будет принята с благодарностью. Нужна дополнительная информация, просто дайте мне знать.

В надстройке Excel у меня есть всплывающее окно, в котором я запрашиваю ввод данных пользователем, и это информация, которую мне нужно сохранить. В этом коде я создаю xml и добавляю в коллекцию.

Код:

    Dim workbook As Excel.Workbook = Globals.ThisAddIn.Application.ActiveWorkbook
    Dim xml As String

    xml = "<?xml version=""1.0"" encoding=""utf-8"" ?>" _
        & "<refreshViewPointData xmlns=""http://refreshviewpointdata.com"">" _
        & "<dataReference>" _
        & "<system>" & cboSystem.Text & "</system>" _
        & "<library>" & cboLibraries.Text & "</library>" _
        & "<view>" & txtObject.Text & "</view>" _
        & "<headers>" & chkInclColumnHdrs.Checked.ToString() & "</headers>" _
        & "<numOfRecords>" & txtRowCount.Text & "</numOfRecords>" _
        & "<reference>" & txtReference.Text & "</reference>" _
        & "</dataReference>" _
        & "</refreshViewPointData>"

    workbook.CustomXMLParts.Add(xml, System.Type.Missing)

В методе ThisAddIn_Startup() файла ThisAddIn.vb я пытаюсь получить CustomXMLPart. Я вызываю метод RetrieveCustomXMLPart() из ThisAddIn_Startup().

Код для RetrieveCustomXMLParts():

    Dim parts As Microsoft.Office.Core.CustomXMLParts

    parts = Application.ActiveWorkbook.CustomXMLParts.SelectByNamespace("http://refreshviewpointdata.com")

    If parts.Count > 0 Then
        RefreshData(parts.ToString())
    End If

Код для RefreshData():

    Dim r As New RibbonViewPoint
    Dim viewXMLPart As New XmlDocument

    Dim system, library, sObject, reference As String
    Dim headers As Boolean
    Dim numRecords As Integer

    'Load the xml from the string.
    viewXMLPart.LoadXml(part)

    'Retrieve the values from the xml document.
    system = viewXMLPart.SelectSingleNode("/dataReference/system").Value
    library = viewXMLPart.SelectSingleNode("/dataReference/library").Value
    sObject = viewXMLPart.SelectSingleNode("/dataReference/view").Value
    headers = CType(viewXMLPart.SelectSingleNode("/dataReference/headers").Value, Boolean)
    numRecords = CType(viewXMLPart.SelectSingleNode("/dataReference/numOfRecords").Value, Integer)
    reference = viewXMLPart.SelectSingleNode("/dataReference/reference").Value

    'Call method to run the object to refresh the data.
    r.RunSelectedObject(system, library, sObject, headers, reference, numRecords)

В методе RetrieveCustomXMLPart() метод SelectByNamespace() не возвращает мой CustomXMLPart, который явно имеет то же пространство имен, что и передаваемый мной. Кто-нибудь знает, что не так?

Кроме того, если у кого-то есть понимание чего-то другого, я не понимаю, что это было бы здорово. В методе RefreshData () я сделал переменную viewXMLPart в качестве XMLDocument для загрузки данных и получения значений оттуда. До этого он был определен как "Dim viewXMLPart As New Microsoft.Office.Core.CustomXMLPart", из-за которого я получал синтаксическую ошибку о том, что "Microsoft.Office.Core.CustomXMLPartClass.Friend Sub New()" недоступен в этот контекст, потому что это друг ".

Спасибо!!!

1 ответ

Решение

Нашел решение. Ниже то, что сработало.

    Dim workbook = Application.ActiveWorkbook
    Dim customXMLParts = workbook.CustomXMLParts.SelectByNamespace("urn:viewpoint-refresh")
    Dim customXMLPart = customXMLParts.Cast(Of CustomXMLPart)().FirstOrDefault()
Другие вопросы по тегам