Повторите сопоставленные значения XML в Excel ListObject - PullRequest
0 голосов
/ 17 февраля 2019

Фон

У меня есть несколько отчетов XML, сопоставленных с двухстолбцовым объектом Excel ListObject (через один XSD).Файлы отчетов XML имеют следующую компоновку:

<report>
    <general>
      <name/>
    </general>
    <data>
        <item/>
        ...
        <item/>
    </data>
</report>

XPath для каждого столбца ListObject:

  1. /ns1:report/ns1:general/ns1:name
  2. /ns1:report/ns1:data/ns1:item

Требуемый вывод

Объект ListObject, содержащий все отдельные записи «/ report / data / item» во втором столбце и одно значение «/ report / general / name», повторенное впервый столбец ListObject для каждого из этих элементов (поэтому я могу затем запросить ListObject для агрегирования информации в определенных отчетах, но не в других).

Текущий вывод

При импорте каждого XML-файла в XMLMap (с использованием опции append) во втором столбце отображается только первый элемент item, а в первом столбце - соответствующий name.Конечный объект ListObject содержит эту информацию для одной записи каждого импортированного файла отчета XML.

Правильность того, следует ли предполагать повторное использование элементов XML, есть ли способ получить желаемый результат?Обратите внимание, что я решил, что XSLT заставит элементы item включать отчет name, но это похоже на плохое использование памяти / дискового пространства.

1 Ответ

0 голосов
/ 17 февраля 2019

Мой тестовый файл

<?xml version="1.0" encoding="iso-8859-1" ?>
<report>
    <general>
      <name>MYNAME</name>
    </general>
      <data>
        <item>A</item>
        <item>B</item>
        <item>C</item>
        <item>D</item>
      </data>
</report>

выглядит следующим образом

Imported example

, если я открыл его через OpenXML:

Private Sub ImportXMLperOpenXML()
    Dim tempWB As Workbook
    Dim ws As Worksheet

    Set ws = ActiveSheet
    Application.DisplayAlerts = False
    Set tempWB = Workbooks.OpenXML("....xml", , xlXmlLoadImportToList)
    Application.DisplayAlerts = True
    tempWB.Sheets(1).Copy After:=ws
    tempWB.Close SaveChanges:=False
End Sub
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...