Получить 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()