Import mehrerer XML Files in Excel
Liebe Leute!
Ich stehe mal wieder vor einer neuen Herausforderung. Ich möchte camt.053 Daten in Excel übernehmen. Ich habe hier ein Script welches 2 Ebenen aufnimmt. Products, Product (id, name, price, quantity). Es wirft leider noch einen Laufzeitfehler.
Jetzt ist die Frage wie ich ein XML mit mehreren Ebenen importieren kann? Und zwar geht es um folgende Information welche ich Excel landen soll.
https://www.hettwer-beratung.de/sepa-spezialwissen/sepa-technische-anfor ...
Mit dem manuellen Weg in Excel via Dialog funktioniert es. Aber ich möchte es entweder beim Öffnen von Excel importieren oder beim Drücken einer Schaltfläche.
Habt ihr hier Ideen wie man das am besten umsetzen kann?
Liebe Grüße
Rob
Ich stehe mal wieder vor einer neuen Herausforderung. Ich möchte camt.053 Daten in Excel übernehmen. Ich habe hier ein Script welches 2 Ebenen aufnimmt. Products, Product (id, name, price, quantity). Es wirft leider noch einen Laufzeitfehler.
<?xml version="1.0" encoding="UTF-8"?>
<Products>
<Product>
<id>053D2014-01-07T21:43:27.0N140000002</Id>
<Name>Name</Name>
<price>25</price>
<quantity>17</quantity>
</Product>
<Product>
<id>053D2014-01-07T21:43:27.0N140000002</Id>
<Name>Name</Name>
<price>25</price>
<quantity>17</quantity>
</Product>
<Product>
<id>053D2014-01-07T21:43:27.0N140000002</Id>
<Name>Name</Name>
<price>25</price>
<quantity>17</quantity>
</Product>
<Product>
<id>053D2014-01-07T21:43:27.0N140000002</Id>
<Name>Name</Name>
<price>25</price>
<quantity>17</quantity>
</Product>
</Products>
Private Sub CommandButton1_Click()
Dim fd As Office.FileDialog
Set fd = Application.FileDialog(msoFileDialogFilePicker)
With fd
.Filters.Clear
.Title = "Multiple XML Files"
.Filters.Add "XML File", "*.xml", 1
.AllowMultiSelect = True
If .Show = True Then
Dim xdoc As Object
Set xdoc = CreateObject("MSXML2.DOMDocument")
xdoc.async = False: xdoc.validateOnParse = False
row_number = 1
For i = 1 To .SelectedItems.Count
xmlFileName = fd.SelectedItems(i)
xdoc.Load (xmlFileName)
Set Products = xdoc.DocumentElement
For Each Product In Products.ChildNodes
Application.Range("ProductsRange").Cells(row_number, 1).Value = Product.ChildNodes(0).Text
Application.Range("ProductsRange").Cells(row_number, 2).Value = Product.ChildNodes(1).Text
Application.Range("ProductsRange").Cells(row_number, 3).Value = Product.ChildNodes(2).Text
Application.Range("ProductsRange").Cells(row_number, 4).Value = Product.ChildNodes(3).Text
row_number = row_number + 1
Next Product
Next i
End If
End With
End Sub
Jetzt ist die Frage wie ich ein XML mit mehreren Ebenen importieren kann? Und zwar geht es um folgende Information welche ich Excel landen soll.
https://www.hettwer-beratung.de/sepa-spezialwissen/sepa-technische-anfor ...
<?xml version="1.0" encoding="UTF-8"?>
<Document xmlns="urn:iso:std:iso:20022:tech:xsd:camt.053.001.02" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="urn:iso:std:iso:20022:tech:xsd:camt.053.001.02 camt.053.001.02.xsd">
<BkToCstmrStmt>
<GrpHdr>
<MsgId>053D2014-01-07T21:43:27.0N140000002</MsgId>
<CreDtTm>2014-01-07T21:43:22.0+01:00</CreDtTm>
<MsgPgntn>
<PgNb>1</PgNb>
<LastPgInd>true</LastPgInd>
</MsgPgntn>
</GrpHdr>
<Stmt>
<Id>0352C5320140107214327</Id>
<ElctrncSeqNb>140000002</ElctrncSeqNb>
<CreDtTm>2014-01-07T21:43:22.0+01:00</CreDtTm>
<Acct>
<Id>
<IBAN>DE14740618130000033626</IBAN>
</Id>
<Ccy>EUR</Ccy>
<Ownr>
<Nm>Testkonto Nummer 1</Nm>
</Ownr>
<Svcr>
<FinInstnId>
<BIC>GENODEF1PFK</BIC>
<Nm>VR-Bank Rottal-Inn eG</Nm>
<Othr>
<Id>DE 129267947</Id>
<Issr>UmsStId</Issr>
</Othr>
</FinInstnId>
</Svcr>
</Acct>
<Bal>
<Tp>
<CdOrPrtry>
<cd>PRCD</cd>
</CdOrPrtry>
</Tp>
<Amt Ccy="EUR">27.61</Amt>
<CdtDbtInd>CRDT</CdtDbtInd>
<Dt>
<Dt>2014-01-07</Dt>
</Dt>
</Bal>
<Bal>
<Tp>
<CdOrPrtry>
<cd>CLBD</cd>
</CdOrPrtry>
</Tp>
<Amt Ccy="EUR">26.41</Amt>
<CdtDbtInd>CRDT</CdtDbtInd>
<Dt>
<Dt>2014-01-07</Dt>
</Dt>
</Bal>
<Ntry>
<Amt Ccy="EUR">1.20</Amt>
<CdtDbtInd>DBIT</CdtDbtInd>
<Sts>BOOK</Sts>
<BookgDt>
<Dt>2014-01-07</Dt>
</BookgDt>
<ValDt>
<Dt>2014-01-03</Dt>
</ValDt>
<AcctSvcrRef>2014010509572720000</AcctSvcrRef>
<BkTxCd/>
<NtryDtls>
<TxDtls>
<Refs>
<EndToEndId>STZV-EtE27122013-11:05-2</EndToEndId>
<MndtId>Mandat20131227</MndtId>
</Refs>
<BkTxCd>
<Prtry>
<cd>NRTI+009</cd>
<Issr>ZKA</Issr>
</Prtry>
</BkTxCd>
<RmtInf>
<Ustrd>Retoure SEPA Lastschrift vom 03.01.2014, Rueckgabegrund: MD06 Lastschriftwiderspruch durch den Zahlungspflichtigen SVWZ: Lastschrift 1. Zahl</Ustrd>
<Ustrd>ung EREF: STZV-EtE27122013-11:05-2 IBAN: DE58740618130100033626 BIC: GENODEF1PFK ABWE: Testkonto</Ustrd>
</RmtInf>
<RtrInf>
<OrgnlBkTxCd>
<Prtry>
<cd>171</cd>
<Issr>ZKA</Issr>
</Prtry>
</OrgnlBkTxCd>
<Orgtr>
<Id>
<OrgId>
<BICOrBEI>GENODEF1PFK</BICOrBEI>
</OrgId>
</Id>
</Orgtr>
<Rsn>
<cd>MD06</cd>
</Rsn>
</RtrInf>
</TxDtls>
</NtryDtls>
</Ntry>
</Stmt>
</BkToCstmrStmt>
</Document>
Mit dem manuellen Weg in Excel via Dialog funktioniert es. Aber ich möchte es entweder beim Öffnen von Excel importieren oder beim Drücken einer Schaltfläche.
Habt ihr hier Ideen wie man das am besten umsetzen kann?
Liebe Grüße
Rob
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 600822
Url: https://administrator.de/contentid/600822
Ausgedruckt am: 22.11.2024 um 22:11 Uhr
2 Kommentare
Neuester Kommentar
Moin,
Probiere mal Methode 2:
https://officetricks.com/convert-xml-to-excel-vba-macro-import/amp/
Gruß
Bdmvg
Probiere mal Methode 2:
https://officetricks.com/convert-xml-to-excel-vba-macro-import/amp/
Gruß
Bdmvg
Einfach mal den Makro-Rekorder angeworfen dann hätte man die XMLImport-Methode gefunden
Sub XML_Dateien_Einlesen()
'Filesystem Object erstellen
Set fso = CreateObject("Scripting.FileSystemObject")
' Pfad der XML Dateien
Pfad = "C:\Temp\quelle"
With ActiveSheet
'Import-Bereich löschen
.UsedRange.Delete
'Eventuell vorhandene Import-Definitionen löschen
While ActiveWorkbook.XmlMaps.Count > 0
ActiveWorkbook.XmlMaps(1).Delete
Next
For Each f In fso.GetFolder(Pfad).Files
If LCase(extension) = LCase(fso.GetExtensionName(f.Path)) Then
'Import der XML-Datei
ActiveWorkbook.XmlImport URL:=f.Path, ImportMap:=Nothing, Overwrite:=False, Destination:=.Cells(Rows.Count, 1).End(xlUp).Offset(1, 0)
'Import-Definitionen löschen
While ActiveWorkbook.XmlMaps.Count > 0
ActiveWorkbook.XmlMaps(1).Delete
Next
End If
Next
End With
Set fso = Nothing
End Sub