Thema Datum  Von Nutzer Rating
Antwort
Rot Daten aus XML-Datei direkt einlesen
25.09.2018 15:34:33 Martin
NotSolved
26.09.2018 17:35:15 Flotter Feger
Solved
01.10.2018 21:00:21 Martin
Solved

Ansicht des Beitrags:
Von:
Martin
Datum:
25.09.2018 15:34:33
Views:
1194
Rating: Antwort:
  Ja
Thema:
Daten aus XML-Datei direkt einlesen

Hallo Forum,

ich hab bereits einbisschen Erfahrungen mit VBA machen können, aber hauptsächlich in öffnen, entpacken, einfügen von Formeln, und neu speichern von Dateien. Aber hier komme ich nun leider nicht mehr weiter. In einem anderen Forum hab ich bisher leider noch keine Antwort auf meine Problem bekommen, deshalb versuche ich es nun hier.

Ich möchte aus mehreren XML Dateien für eine private Auswertung verschiedene Daten auslesen direkt aus der XML. Jedoch bekomme ich es nicht hin das die Codes in der Excel Tabelle drin stehen: Folgend die XML welche ich habe:

---------------------------------

<?xml version="1.0" encoding="UTF-8"?>
<product type="Example" creator="System" season="W" Year="2018" organizer="Frankreich" name="Martin Geiger" language="fr" category="4" category2="" cityName="Home" externalID="0017508" Code="H" bookingSequence="ABC1231" validFrom="01.11.2018" validTo="31.03.2019" lastChange="2018-09-11 12:08:15" delete="">
  <Key ID="123456" catalogID="0"></Key>
  <catalogue page="184">Winter</catalogue>
  <additionalCode bookingSequence="ABC1234"</additionalCode>
  <additionalCode bookingSequence="ABC1235"</additionalCode>
  <additionalCode bookingSequence="ABC1236"</additionalCode>
  <additionalCode bookingSequence="ABC1237"</additionalCode>
....
....
....
....
....
</product>

----------------------------

Hier der VBA Code welchen ich bereits angefangen hab anzupassen:


Sub readXML()
  Dim vntFiles As Variant, vntValues() As Variant
  Dim lngIndex As Long, lngC As Long
  Dim ff As Integer
  Dim strTmp As String
  
  'Datei(en) wählen - Mehrfachselektion möglich
  vntFiles = Application.GetOpenFilename("XML Dateien (*.xml),*.xml", MultiSelect:=True)
  
  'wennDateien gewählt
  If IsArray(vntFiles) Then
    'Ausgabearray dimensionieren
    ReDim vntValues(1 To UBound(vntFiles) + 1, 1 To 6000)
    vntValues(1, 1) = "File"
    'Dateien durchlaufen
    For lngIndex = LBound(vntFiles) To UBound(vntFiles)
      'Dateiname
      vntValues(lngIndex + 1, 1) = Mid(vntFiles(lngIndex), InStrRev(vntFiles(lngIndex), "\") + 1)
      ff = FreeFile
      lngC = 1
      'xml-Datei öffnen
      Open vntFiles(lngIndex) For Input As #ff
      'Zeilen durchlaufen
      Do While Not EOF(ff)
        'zeile lesen
        Line Input #ff, strTmp
        strTmp = Trim$(strTmp)
        'Zeile auf Zeichenfolge prüfen
        If LCase(strTmp) Like "<additionalcode bookingsequence=*" Then
          'Spaltenzähle hochzählen
          lngC = lngC + 1
          'String aufteilen
          strTmp = Mid(strTmp, 34)
          strTmp = Left(strTmp, Len(strTmp) - 19)
          'nochmal prüfen
          If InStr(1, strTmp, ">") Then
            'in Array schreiben
            If lngIndex = 1 Then vntValues(lngIndex, lngC) = Split(strTmp, """")(0)
            vntValues(lngIndex + 1, lngC) = Replace(Split(strTmp, """>")(1), ",", ".")
          End If
        End If
      Loop
      Close #ff
    Next
  End If
  
  'Ausgabe
  With Range("A1").Resize(UBound(vntValues, 1), UBound(vntValues, 2))
    .Value = vntValues
    .NumberFormat = "0.00"
    .Columns.AutoFit
  End With
  
End Sub

----------------------

Ich glaube das in dem folgenden Teil irgendwo eine Anpassung fehlt damit es auch funktioniert:
 

          'String aufteilen
          strTmp = Mid(strTmp, 34)
          strTmp = Left(strTmp, Len(strTmp) - 19)
          'nochmal prüfen
          If InStr(1, strTmp, ">") Then
            'in Array schreiben
            If lngIndex = 1 Then vntValues(lngIndex, lngC) = Split(strTmp, """")(0)
            vntValues(lngIndex + 1, lngC) = Replace(Split(strTmp, """>")(1), ",", ".")



Jedoch weiss ich nicht was ich hier entsprechend noch anpassen muss damit es funktioniert oder wie der Code auszusehen hat. Kann mir hier jemand weiterhelfen?

Danke & viele Grüsse,
Martin


Ihre Antwort
  • Bitte beschreiben Sie Ihr Problem möglichst ausführlich. (Wichtige Info z.B.: Office Version, Betriebssystem, Wo genau kommen Sie nicht weiter)
  • Bitte helfen Sie ebenfalls wenn Ihnen geholfen werden konnte und markieren Sie Ihre Anfrage als erledigt (Klick auf Häckchen)
  • Bei Crossposting, entsprechende Links auf andere Forenbeiträge beifügen / nachtragen
  • Codeschnipsel am besten über den Code-Button im Text-Editor einfügen
  • Die Angabe der Emailadresse ist freiwillig und wird nur verwendet, um Sie bei Antworten auf Ihren Beitrag zu benachrichtigen
Thema: Name: Email:



  • Bitte beschreiben Sie Ihr Problem möglichst ausführlich. (Wichtige Info z.B.: Office Version, Betriebssystem, Wo genau kommen Sie nicht weiter)
  • Bitte helfen Sie ebenfalls wenn Ihnen geholfen werden konnte und markieren Sie Ihre Anfrage als erledigt (Klick auf Häckchen)
  • Bei Crossposting, entsprechende Links auf andere Forenbeiträge beifügen / nachtragen
  • Codeschnipsel am besten über den Code-Button im Text-Editor einfügen
  • Die Angabe der Emailadresse ist freiwillig und wird nur verwendet, um Sie bei Antworten auf Ihren Beitrag zu benachrichtigen

Thema Datum  Von Nutzer Rating
Antwort
Rot Daten aus XML-Datei direkt einlesen
25.09.2018 15:34:33 Martin
NotSolved
26.09.2018 17:35:15 Flotter Feger
Solved
01.10.2018 21:00:21 Martin
Solved