Forums Neueste Beiträge
 

Datenimport aus xml file

02/04/2009 - 19:41 von Mark Wolf | Report spam
Hallo,

Ich möchte gerne Daten aus einem XML file importieren.
Hier mal ein Ausschnitt:

<?xml version="1.0" encoding="UTF-8"?>
<gpx xmlns="http://www.topografix.com/GPX/1/1"
xmlns:xalan="http://xml.apache.org/xalan"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" creator="MotionX Live"
version="1.1">
<trk>
<name>Track 002</name>
<desc>02.04.2009 11:35 am</desc>
<trkseg>
<trkpt lat="50.909126" lon="13.345234">
<ele>421.436474</ele>
<time>2009-04-02T09:35:50Z</time>
</trkpt>
<trkpt lat="50.909126" lon="13.345234">
<ele>421.436474</ele>
<time>2009-04-02T09:35:56Z</time>
</trkpt>
<trkpt lat="50.909156" lon="13.345118">
<ele>421.297088</ele>
<time>2009-04-02T09:36:07Z</time>
</trkpt>...

Die Kopfdaten interessieren nicht so. Als Ergebniss soll das folgendermassen
aussehen: In einer Zeile sollen die vier zusammegehöhrenden Werte stehen.
Also Spalte1: 50.909126 Spalte2: 13.345234 Spalte3: 421.436474
Spalte4: 2009-04-02T09:35:50Z(super wàre, Datum und Zeit in eine extra
Zelle).
In der zweiten Zeile dann der nàchste Block usw

Der Importassistent brachte mich nicht wirklich weiter, da im Besten Fall
noch zu viel nachgearbeitet werden muss. Es sind ca. 20000 Zeilen und mehr.
:-( Was man zentral für mehrere zellen gleichzeitig machen kann ist OK, aber
einzele bearbeitung scheidet bei der Menge aus.
Mit VBA kenne ich mich nicht soooo gut aus, habe aber schon mit
entprechender Anleitung einige Macros hinbekommen.

MfG
Mark
 

Lesen sie die antworten

#1 Michael Schwimmer
03/04/2009 - 02:36 | Warnen spam
Hallo Mark,

Am Thu, 02 Apr 2009 19:41:07 +0200 schrieb Mark Wolf:
Ich möchte gerne Daten aus einem XML file importieren.
Hier mal ein Ausschnitt:

<?xml version="1.0" encoding="UTF-8"?>
<gpx xmlns="http://www.topografix.com/GPX/1/1"
xmlns:xalan="http://xml.apache.org/xalan"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" creator="MotionX Live"
version="1.1">
<trk>
<name>Track 002</name>
<desc>02.04.2009 11:35 am</desc>
<trkseg>
<trkpt lat="50.909126" lon="13.345234">
<ele>421.436474</ele>
<time>2009-04-02T09:35:50Z</time>
</trkpt>
Die Kopfdaten interessieren nicht so. Als Ergebniss soll das folgendermassen
aussehen: In einer Zeile sollen die vier zusammegehöhrenden Werte stehen.
Also Spalte1: 50.909126 Spalte2: 13.345234 Spalte3: 421.436474
Spalte4: 2009-04-02T09:35:50Z(super wàre, Datum und Zeit in eine extra
Zelle).
In der zweiten Zeile dann der nàchste Block usw
Mit VBA kenne ich mich nicht soooo gut aus, habe aber schon mit
entprechender Anleitung einige Macros hinbekommen.



Na, dann weißt du ja, wo das folgende "Makro" hinsollte (in ein allgemeines
Modul):

Public Sub ReadTopografix()
Dim strFile As String
Dim objXMLDoc As Object
Dim objGpx As Object
Dim objTrk As Object
Dim objTrkseg As Object
Dim objTrkpt As Object
Dim strText As String
Dim i As Long

On Error GoTo Fehlerbehandlung

' Dialog zur Dateiauswahl
strFile = Application.GetOpenFilename( _
"XML-Dateien (*.xml),*.xml)")

' Keine Datei ausgewàhlt, dann abbrechen
If Dir(strFile) = "" Then Exit Sub

' DOM-Objekt erzeugen
Set objXMLDoc = CreateObject("MSXML2.DOMDocument")

' XML-Datei laden
objXMLDoc.Load strFile

' Knoten "gpx"
Set objGpx = objXMLDoc.ChildNodes(1)

' Knoten "trk"
Set objTrk = objGpx.ChildNodes(0)

' Knoten "trkseg"
Set objTrkseg = objTrk.ChildNodes(2)

Application.ScreenUpdating = False

' Zieltabellenname anpassen
With Worksheets("Tabelle1")
.Cells.ClearContents
i = 1
.Cells(i, 1) = "lon"
.Cells(i, 2) = "lat"
.Cells(i, 3) = "ele"
.Cells(i, 4) = "Date"
.Cells(i, 5) = "Time"
For Each objTrkpt In objTrkseg.ChildNodes
' Alle Kindknoten durchlaufen
i = i + 1
' Attribut "lat"
.Cells(i, 1) = objTrkpt.Attributes(0).Text
' Attribut "lon"
.Cells(i, 2) = objTrkpt.Attributes(1).Text
' Knoten "ele"
.Cells(i, 3) = objTrkpt.ChildNodes(0).Text
' Knoten "time"
strText = objTrkpt.ChildNodes(1).Text
.Cells(i, 4) = Split(strText, "T")(0)
strText = Split(strText, "T")(1)
.Cells(i, 5) = Left(strText, Len(strText) - 1)
Next
End With
Fehlerbehandlung:
Application.ScreenUpdating = True
End Sub

Viele Grüße
Michael



http://michael-schwimmer.de
Masterclass Excel VBA ISBN-10: 3827325250
Das Excel-VBA Codebook ISBN-10: 3827324718
Microsoft Office Excel 2007-Programmierung ISBN-10: 3866454139

Ähnliche fragen