我有几个XML报告映射到一个两列的Excel ListObject(通过一个XSD)。 XML报告文件具有以下布局:
<report>
<general>
<name/>
</general>
<data>
<item/>
...
<item/>
</data>
</report>
每个ListObject列的XPath是:
/ns1:report/ns1:general/ns1:name
/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
,但是这似乎对内存/磁盘空间的使用很差。
答案 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>
看起来像这样
如果我通过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