以三种不同的方式将XML文件导入Excel

我的XML文件看起来像这样:

在这里输入图像说明

当我将这个文件导入Excel时,我得到一个包含其内容的表格。 但是,我需要为每个标签分别使用三个表格:

<Header> <MasterFiles> <SourceDocuments> 

因为它们看起来像三个相关的表格。

我用来导入文件的代码是:

 strTargetFile = "C:\SAFT.xml" Set wb = Workbooks.OpenXML(Filename:=strTargetFile, LoadOption:=xlXmlLoadImportToList) wb.Sheets(1).UsedRange.Copy ThisWorkbook.Sheets("Sheet2").Range("A1") 

但是如何将XML文件分解成三部分并将每个文件导入到不同的工作表?

考虑通过VBA的MSXML对象使用XSLT将更大的XML中的节点抽取到单独的XML文件中,并将所有这三个文件分别导入到不同的工作簿中:

XSLT (embedded在select节点更改的macros下方)

 <?xml version="1.0" encoding="UTF-8"?> <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> <xsl:output omit-xml-declaration="yes" indent="yes"/> <xsl:strip-space elements="*"/> <xsl:template match="*"> <xsl:copy-of select="Header"/> </xsl:template> </xsl:stylesheet> 

Excelmacros

 Sub ExtractData() On Error GoTo ErrHandle Dim xmlDoc As New MSXML2.DOMDocument, xslDoc As New MSXML2.DOMDocument, newDoc As New MSXML2.DOMDocument Dim nodeArray As Variant, item As Variant Dim wb As Workbook nodeArray = Array("Header", "MasterFiles", "SourceDocuments") ' LOADING ORIGINAL XML FILE ' xmlDoc.Load ActiveWorkbook.Path & "\Audit.xml" For Each item In nodeArray ' LOADING EMBEDDED STRING XSLT DYNAMICALLY SELECTING NODE ' xslDoc.LoadXML "<?xml version=" & Chr(34) & "1.0" & Chr(34) & " encoding=" & Chr(34) & "UTF-8" & Chr(34) & "?>" _ & "<xsl:stylesheet version=" & Chr(34) & "1.0" & Chr(34) & "" _ & " xmlns:xsl=" & Chr(34) & "http://www.w3.org/1999/XSL/Transform" & Chr(34) & ">" _ & "<xsl:output omit-xml-declaration=" & Chr(34) & "yes" & Chr(34) & " indent=" & Chr(34) & "yes" & Chr(34) & "/>" _ & "<xsl:strip-space elements=" & Chr(34) & "*" & Chr(34) & "/>" _ & "<xsl:template match=" & Chr(34) & "*" & Chr(34) & ">" _ & "<xsl:copy-of select=" & Chr(34) & item & Chr(34) & "/>" _ & "</xsl:template>" _ & "</xsl:stylesheet>" ' TRANSFORMING ORIGINAL XML ' xmlDoc.transformNodeToObject xslDoc, newDoc ' OUTPUTTING TRANSFORMED SMALLER XML FILES ' newDoc.Save ActiveWorkbook.Path & "\" & item & ".xml" ' OPENING EACH XML FILE INTO WORKBOOK ' Set wb = Workbooks.OpenXML(Filename:=ActiveWorkbook.Path & "\" & item & ".xml", LoadOption:=xlXmlLoadImportToList) Next item MsgBox "Successfully transformed and loaded XML files!", vbInformation Set wb = Nothing Exit Sub ErrHandle: MsgBox Err.Number & " - " & Err.Description, vbCritical Exit Sub End Sub