将映射的XML值重复到Excel ListObject中

时间:2019-02-17 00:01:08

标签: excel xml vba office365

背景

我有几个XML报告映射到一个两列的Excel ListObject(通过一个XSD)。 XML报告文件具有以下布局:

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

每个ListObject列的XPath是:

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

所需的输出

一个ListObject,它在第二列中具有所有单独的“ / report / data / item”记录,并且在每个的第一ListObject列中重复一个“ / report / general / name”值。 (因此我可以查询ListObject来汇总某些报告中的信息,而不是其他报告中的信息)。

电流输出

在将每个XML文件导入XMLMap(使用append选项)之后,仅第一个item元素出现在第二列中,而相应的name出现在第一列中。最终的ListObject包含有关导入的每个XML报告文件的一条记录的信息。

是否应该假设除了XML元素的重用以外,是否有一种方法可以获取所需的输出?请注意,我已经考虑过使用XSLT强制item元素包括报告name,但是这似乎对内存/磁盘空间的使用很差。

1 个答案:

答案 0 :(得分:0)

我的测试文件

<?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