Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender

Forumthread: Daten aus XML-Datei direkt einlesen

Daten aus XML-Datei direkt einlesen
21.09.2018 22:46:46
Martin
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.
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 Folgend die XML welche ich habe:
---------------------------------



Winter




....
....
....
....
....

----------------------------
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 "") 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 im vorraus & viele Grüsse,
Martin
Anzeige

1
Beitrag zum Forumthread
Beitrag zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Daten aus XML-Datei direkt einlesen
21.09.2018 22:50:54
Martin
Nachtrag: Hier ist die XML Datei, da sie im Beitrag nicht angezeigt wird:
https://www.herber.de/bbs/user/124145.zip
Anzeige
;

Forumthreads zu verwandten Themen

Anzeige
Anzeige
Anzeige
Anzeige
Anzeige

Infobox / Tutorial

Daten aus XML-Datei direkt einlesen in Excel


Schritt-für-Schritt-Anleitung

Um Daten aus einer XML-Datei in Excel einzulesen, kannst du den folgenden VBA-Code verwenden. Dieser Code ist speziell für Excel konzipiert und ermöglicht es dir, die XML-Daten einfach auszulesen.

  1. Öffne Excel und drücke ALT + F11, um den VBA-Editor zu starten.

  2. Füge ein neues Modul hinzu: Klicke auf Einfügen > Modul.

  3. Kopiere den folgenden VBA-Code in das Modul:

    Sub readXML()
       Dim vntFiles As Variant, vntValues() As Variant
       Dim lngIndex As Long, lngC As Long
       Dim ff As Integer
       Dim strTmp As String
    
       vntFiles = Application.GetOpenFilename("XML Dateien (*.xml),*.xml", MultiSelect:=True)
       If IsArray(vntFiles) Then
           ReDim vntValues(1 To UBound(vntFiles) + 1, 1 To 6000)
           vntValues(1, 1) = "File"
           For lngIndex = LBound(vntFiles) To UBound(vntFiles)
               vntValues(lngIndex + 1, 1) = Mid(vntFiles(lngIndex), InStrRev(vntFiles(lngIndex), "\") + 1)
               ff = FreeFile
               lngC = 1
               Open vntFiles(lngIndex) For Input As #ff
               Do While Not EOF(ff)
                   Line Input #ff, strTmp
                   strTmp = Trim$(strTmp)
                   If LCase(strTmp) Like "<additionalcode bookingsequence="*" Then
                       ' Hier erfolgt die Anpassung, um bookingsequence auszulesen
                       vntValues(lngIndex + 1, lngC) = Mid(strTmp, InStr(strTmp, "=") + 2, InStrRev(strTmp, """") - InStr(strTmp, "=") - 2)
                       lngC = lngC + 1
                   End If
               Loop
               Close #ff
           Next
           With Range("A1").Resize(UBound(vntValues, 1), UBound(vntValues, 2))
               .Value = vntValues
               .Columns.AutoFit
           End With
       End If
    End Sub
  4. Schließe den VBA-Editor und gehe zurück zu Excel.

  5. Führe das Makro aus: Drücke ALT + F8, wähle readXML und klicke auf Ausführen.

  6. Wähle die XML-Dateien aus, die du einlesen möchtest.


Häufige Fehler und Lösungen

  • Fehler: Keine Daten angezeigt
    Lösung: Stelle sicher, dass die XML-Dateien das erwartete Format haben, insbesondere die <additionalcode>-Tags. Überprüfe den XML-Code auf Syntaxfehler.

  • Fehler: VBA-Code funktioniert nicht
    Lösung: Achte darauf, dass du den VBA-Code genau kopiert hast und dass die richtigen Berechtigungen für Makros in Excel aktiviert sind.


Alternative Methoden

Wenn du keine VBA-Programmierung verwenden möchtest, kannst du auch die integrierte Funktion in Excel nutzen:

  1. Öffne Excel und gehe zu Daten > Daten abrufen > Aus Datei > Aus XML.
  2. Wähle die XML-Datei aus, die du einlesen möchtest.
  3. Folge den Anweisungen, um die Daten in Excel zu importieren.

Diese Methode eignet sich besonders für einfache XML-Dateien.


Praktische Beispiele

Hier ist ein Beispiel für eine XML-Datei:

<?xml version="1.0" encoding="UTF-8"?>
<products>
    <product bookingsequence="ABC1234" />
    <product bookingsequence="ABC1235" />
</products>

Der VBA-Code wird die bookingsequence-Werte extrahieren und in Excel in der entsprechenden Spalte anzeigen.


Tipps für Profis

  • Verwende Fehlerbehandlung im VBA-Code, um unerwartete Probleme zu erkennen und zu beheben.
  • Experimentiere mit den XML-Datenstrukturen, um komplexere Daten auszulesen.
  • Nutze Formeln und Pivot-Tabellen in Excel, um die importierten Daten weiter zu analysieren.

FAQ: Häufige Fragen

1. Was sind XML-Dateien?
XML (Extensible Markup Language) ist ein Format zur Speicherung und Übertragung von strukturierten Daten. Es wird häufig in Webanwendungen und zur Datenübertragung zwischen Systemen verwendet.

2. Wie kann ich eine XML-Datei in Excel öffnen?
Du kannst eine XML-Datei in Excel öffnen, indem du zu Daten > Daten abrufen > Aus Datei > Aus XML gehst und die gewünschte Datei auswählst.

3. Ist es möglich, eine XML-Datei automatisch mit Excel zu öffnen?
Ja, du kannst Makros verwenden, um XML-Dateien automatisch in Excel zu importieren. Dies spart Zeit, wenn du regelmäßig Daten aus XML-Dateien benötigen.

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige