tranministrator
Goto Top

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.


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

Content-Key: 600822

Url: https://administrator.de/contentid/600822

Ausgedruckt am: 28.03.2024 um 12:03 Uhr

Mitglied: beidermachtvongreyscull
beidermachtvongreyscull 31.08.2020 um 09:24:02 Uhr
Goto Top
Mitglied: 145033
145033 31.08.2020 aktualisiert um 11:04:52 Uhr
Goto Top
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