Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1448to1452
Aktuelles Verzeichnis
Verzeichnis Index
Übersicht Verzeichnisse
Vorheriger Thread
Rückwärts Blättern
Nächster Thread
Vorwärts blättern
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

xml daten einlesen

xml daten einlesen
08.10.2015 13:24:47
marco
Hallo,
Ich bastelle momentan an eine Code, der mir ermöglicht Daten aus einer XML Strucktur ins Excel zu übernehmen.
Dazu habe ich mir folgende Prozedur aus dem Netz zusammen gestellt und bei mir angepasst.
Mein Problem ist:
Meine Eindeutige ID ist die der Adresse?
Bedeutet was ich suche: => Prüfe jeden Block, diese können Variiern, wenn Adresse gleich Wert aus ActiveSheet.Cells(3, spalten) dann SWVersion und HWVersion aus diesem Block übernehmen.
Anbei eine ausszug aus der xml strucktur
-----------------------------
1. Diagnosebloecke Anzahl="24"
2. Diagnoseblock Block="1"
3. Adresse>01
4. SWVersion>C029
5. HWVersion>Y12
------------------------------
Anbei mein Code. bei diesem Code werden die ID der Bloecke verglichen. diese sind aber leider nicht immer die gleichen ID nummern wire die Adresse darunter.
Sub IDEX_Einlesen()
Dim strAddr As String
Dim FW(1) As String
Dim XMLDATEI As String
Dim UserName As String
UserName = Application.UserName
strAddr = ActiveSheet.Shapes(Application.Caller).TopLeftCell.Address
FW(1) = Range(strAddr).Value
If UserName " Marco " Then
MsgBox UserName & "," & Chr(13) & Chr(13) & _
"Sorry, Sie sind nicht befugt dieses Makro zu starten!" & Chr(13) & Chr(13) _
& "Zugriff verweigert!"
Exit Sub
End If
XMLDATEI = "C:\Users\dellama\Desktop\test\" & FW(1) & ".xml" 'Bezugspfad mit variablen click befehl.
XMLDateiAuslesen XMLDATEI
End Sub
Private Sub XMLDateiAuslesen(ByVal XmlDateiMitPfad As String)
Dim spalten As Integer
Dim strAddr As String
strAddr = ActiveSheet.Shapes(Application.Caller).TopLeftCell.Address
Dim i As Integer
Dim FW(1) As String
FW(1) = Range(strAddr).Value
i = Range(Cells(6, 2), Cells(Rows.Count, 2)).Find(What:=FW(1)).Row
Dim xmlDoc As New MSXML2.DOMDocument
Dim xmlKnoten As IXMLDOMNode
Dim xpathKnoten As String
Dim xpathAttrib1 As String
xmlDoc.async = False
xmlDoc.validateOnParse = True                    ' Auf Fehler prüfen
xmlDoc.Load (XmlDateiMitPfad)                    ' XML-Datei laden
If xmlDoc.Load(XmlDateiMitPfad) = False Then
MsgBox "XML-Datei: '" & XmlDateiMitPfad & "' wurde nicht gefunden"
Exit Sub
ElseIf xmlDoc.parseError = True Then
MsgBox "XML-Datei: '" & XmlDateiMitPfad & "' hat fehlerhaften Aufbau (ist nicht ' _
wohlgeformt')"
Exit Sub
End If
xmlDoc.setProperty "SelectionLanguage", "XPath"  ' Suchen soll mittels XPath erfolgen
For spalten = 7 To 17
' Auf -Knoten gehen und prüfen, ob der Wert des Attributs Block ü _
bereinstimmt
xpathKnoten = "/*/Diagnosebloecke/Diagnoseblock"                     ' Knoten-Teil für die   _
_
_
XPath-Anweisung
xpathAttrib1 = "[@Block ='" & ActiveSheet.Cells(3, spalten) & "']"   ' Attribute-Teil1 für   _
_
_
die XPath-Anweisung
Set xmlKnoten = xmlDoc.SelectSingleNode(xpathKnoten & xpathAttrib1)    ' XPath-Anweisung  _
mit Attribut-Vergleich
If xmlKnoten Is Nothing Then GoTo Weiter
With ActiveSheet
.Cells(i + 6, spalten) = xmlKnoten.SelectSingleNode("SWVersion").Text
.Cells(i + 3, spalten) = xmlKnoten.SelectSingleNode("HWVersion").Text
End With
Weiter:
Next spalten
End Sub

1
Beitrag zum Forumthread
Beitrag zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: xml daten einlesen
09.10.2015 16:06:45
marco
Hallo,
Folgender Weise habe ich dies gelöst.
Danke nochmals
Sub ReadXml()
Dim FW(1) As String
Dim strFileName As String
Dim strAddr As String
Dim XMLDATEI As String
Dim spalten As Integer
Dim i As Integer
Dim UserName As String
UserName = Application.UserName
strAddr = ActiveSheet.Shapes(Application.Caller).TopLeftCell.Address
FW(1) = Range(strAddr).Value
If UserName  "Marco" Then
MsgBox UserName & "," & Chr(13) & Chr(13) & _
"Sorry, Sie sind nicht befugt dieses Makro zu starten!" & Chr(13) & Chr(13) _
& "Zugriff verweigert!"
Exit Sub
End If
i = Range(Cells(6, 2), Cells(Rows.Count, 2)).Find(What:=FW(1)).Row
strFileName = "C:\Users\dellama\Desktop\test\" & FW(1) & ".xml"
Dim xmlDoc As New MSXML2.DOMDocument
Dim xmlKnoten As IXMLDOMNode
Dim xmlAdresseKnoten As IXMLDOMNode
Dim xpathKnoten As String
Dim xpathAttrib1 As String
Dim strAdresseToSearch As String
Dim strFullSearchString As String
xmlDoc.async = False
xmlDoc.validateOnParse = True                    ' Auf Fehler prüfen
Call xmlDoc.Load(strFileName)                     ' XML-Datei laden
xmlDoc.setProperty "SelectionLanguage", "XPath"  ' Suchen soll mittels XPath erfolgen
For spalten = 7 To 17
strAdresseToSearch = ActiveSheet.Cells(3, spalten)
'XPath-Ausdruck zusammenbauen
strFullSearchString = "/*/Diagnosebloecke/Diagnoseblock/Adresse[text()='" &  _
strAdresseToSearch & "']"
'wir wollen ja aber den Parent-Node (also  haben, daher springen wir wieder  _
eine Ebene zurück)
Set xmlAdresseKnoten = xmlDoc.SelectSingleNode(strFullSearchString)
If Not (xmlAdresseKnoten Is Nothing) Then
Set xmlKnoten = xmlAdresseKnoten.ParentNode
With ActiveSheet
.Cells(i + 6, spalten) = xmlKnoten.SelectSingleNode("SWVersion").Text
.Cells(i + 3, spalten) = xmlKnoten.SelectSingleNode("HWVersion").Text
End With
End If
Next spalten
End Sub

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige