Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1376to1380
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 auslesen

XML auslesen
29.08.2014 18:32:01
Ewald
Hallo,
habe einen Code um xlm Dateien auszulesen, dieser enthält eine Zeile wo ich nicht weiß, was dort eingetragen werden muß.
xpathKnoten = "/testResult/testInfo" ' Knoten-Pfad für die XPath-Anweisung
Set xmlKnoten = xmlDoc.SelectSingleNode(xpathKnoten) ' XPath-Anweisung

weiß vielleicht jemand was bei xpathknoten rein muß.
Gruß Ewald

12
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: XML auslesen
29.08.2014 19:57:20
schauan
Hallo Ewald,
da kommt der Pfad zu Deinem Knoten rein, wie Du es auch im Kommentar hast. Wie der Pfad ist, da musst DU in die xml schauen ...
Hoffe geholfen zu haben, Grüße von André (schauan) aus Gera - Excel-97-2013

AW: XML auslesen
29.08.2014 22:46:02
Ewald
Hallo Andre
wo steht denn der Pfad, die xml sehen alle gleich aus
hier mal ein Beispiel
?xml version="1.0" encoding="UTF-8"?>       
a:clrScheme xmlns:a="http://schemas.openxmlformats.org/drawingml/2006/main" name="Slipstream"       
a:dk1       
a:sysClr lastClr="000000" val="windowText"/       
a:lt1       
/a:dk1       
a:sysClr lastClr="FFFFFF" val="window"/       
/a:lt1       
a:dk2       
a:srgbClr val="212745"/       
/a:dk2       
a:lt2       
a:srgbClr val="B4DCFA"/       
/a:lt2       
a:accent1       
a:srgbClr val="4E67C8"/       
/a:accent1       
a:accent2       
a:srgbClr val="5ECCF3"/       
/a:accent2       
a:accent3       
a:srgbClr val="A7EA52"/       
/a:accent3       
a:accent4       
a:srgbClr val="5DCEAF"/       
/a:accent4       
a:accent5       
a:srgbClr val="FF8021"/       
/a:accent5       
a:accent6       
a:srgbClr val="F14124"/       
/a:accent6       
a:hlink       
a:srgbClr val="56C7AA"/       
/a:hlink       
a:folHlink       
a:srgbClr val="59A8D1"/       
/a:folHlink       
/a:clrScheme       
        
Diese Tabelle wurde mit Tab2Html (v2.4.1) erstellt. ©Gerd alias Bamberg
Gruß Ewald

Anzeige
AW: XML auslesen
29.08.2014 23:57:42
Mullit
Hallo,
weiß zwar nicht, was Du vor hast, aber wenn ich das Bsp. von M$ richtig lese, mußt Du den Pfad selbst generieren, indem Du Dich durch die Knoten hangelst...
Gruß,

AW: XML auslesen
30.08.2014 00:57:38
Ewald
Hallo Mullit,
ich möchte ab Zeile 2 alle Werte haben die in " " stehen.
in Zeile4 und Zeile7 aber nur den ersten " " Wert.
Habe jetzt noch eine andere Möglichkeit gefunden.
Man kann die xml in Excel öffnen,allerdings erzeugt Excel da eine neue Mappe und in Zeile1 stehen dann alle Werte.
 Workbooks.OpenXML Filename:= _
"C:\Program Files\Microsoft Office\Document Themes 14\Theme Colors\Aspect.xml" _
, LoadOption:=xlXmlLoadImportToList
hier ist der Dateiname angegeben.
Nun hat der Ordner 40 xml,diese sollen nun automatisch durchlaufen werden und dann müßte aus 40 Mappen die erste Zeile ausgelesen werden.
Leider finde ich in der Hilfe keinen Hinweis für Loadoption so das man nur eine Mappe braucht.
Gruß Ewald

Anzeige
AW: XML auslesen
30.08.2014 13:30:53
Ewald
Hallo,
habe jetzt den xmlknoten gefunden

xpathKnoten = "a:clrScheme"
Lauf jetzt aber in einen Fehler bei diesen Zeilen
    On Error GoTo Fehler                                    ' Falls ein Attribut nicht  _
vorhanden ist
With xmlKnoten.Attributes                               ' Alle Attributwerte zunächst in  _
Array übernehmen
AttributWerte(0) = .getNamedItem("pruefumfangName").Text
AttributWerte(1) = .getNamedItem("testDuration").Text
AttributWerte(2) = .getNamedItem("errorCount").Text
AttributWerte(3) = .getNamedItem("testTime").Text
End With
Fehler:
If Err.Number  0 Then                                 ' Fehlerbehandlung
Err.Clear
Exit Function                                       ' Exit: Auslesen NICHT erfolgreich
End If
On Error GoTo 0                                         ' Normale Fehlerbehandlung
direkt nach AttributWerte(0) = .getNamedItem("pruefumfangName").Text springt er in die Fehlerbehandung und verläßt die Funktion.
Gruß Ewald

Anzeige
AW: XML auslesen
30.08.2014 16:07:33
Mullit
Hallo Ewald,
gleich vorweg: hab' ich bisher auch noch nicht gemacht, also ist vielleicht etwas improvisiert, aber Du mußt Dich wohl durch die Objektreferenzen hangeln...
Ich krieg' sowas zunächst ins Laufen:
Option Explicit
Public Sub test()
Dim strXmlExportDoc As String
Dim objXmlDoc As Object
Dim objXmlNode As Object
strXmlExportDoc = "C:\Program Files\Microsoft Office\Document Themes 14\Theme Colors\Grayscale. _
xml"
Set objXmlDoc = CreateObject("MSXML2.DOMDocument")
objXmlDoc.Load strXmlExportDoc
Set objXmlNode = objXmlDoc.SelectSingleNode("a:clrScheme")  ' XPath-Anweisung
MsgBox objXmlDoc.DocumentElement.Attributes.Item(1).Value
MsgBox objXmlNode.GetAttribute("name")
Set objXmlDoc = Nothing
Set objXmlNode = Nothing
End Sub

Entscheidend hier die XmlElement Klasse; ich füg mal ein paar M$-Referenzen an:
http://msdn.microsoft.com/de-de/library/system.xml.xmldocument.documentelement%28v=vs.110%29.aspx
http://msdn.microsoft.com/en-us/library/System.Xml.XmlElement%28v=vs.110%29.aspx
http://msdn.microsoft.com/en-us/library/system.xml.xmlelement.attributes%28v=vs.110%29.aspx
http://msdn.microsoft.com/en-us/library/acwfyhc7%28v=vs.110%29.aspx
http://msdn.microsoft.com/de-de/library/System.Xml.XmlNode%28v=vs.110%29.aspx
Um an die ColorValues zu kommen, müsstest Du u.U. einen Knoten tiefer steigen; da erhalte ich aber auch Fehler; könnte vielleicht mit den Eigenschaften XmlNode.FirstChild / XmlNode.HasChildNodes klappen......?
Gruß, Mullit

Anzeige
AW: XML auslesen
31.08.2014 00:03:24
Mullit
Hallo Ewald,
für den Fall, daß Du noch Material benötigst, hab' hier einen Ansatz für das Auslesen der Colorvalues aus den Theme-Color-XML-Dats...
Quellen hierzu waren:
http://msdn.microsoft.com/de-de/library/aa468547.aspx
http://www.office-loesung.de/ftopic272205_0_0_asc.php
http://www.vb-magazin.de/forums/forums/t/6336.aspx?PageIndex=1
Option Explicit

Public Sub prcListNodes()
Dim objXmlDoc As Object
Dim strListNodes As String
Set objXmlDoc = CreateObject("MSXML2.DOMDocument")
With objXmlDoc
    .validateOnParse = False
    If .Load("C:\Program Files\Microsoft Office\Document Themes 14\Theme Colors\Grayscale.xml") _
Then
      Call prcDisplayNode(.ChildNodes, strListNodes)
      MsgBox strListNodes
    Else
      MsgBox "Fehler beim Laden des XML-Dokuments!", vbCritical
    End If
End With
Set objXmlDoc = Nothing
End Sub

Private Sub prcDisplayNode(ByRef probjXmlNodes As Object, ByRef prstrListNodes As String)
Dim objXmlNode As Object
For Each objXmlNode In probjXmlNodes
    With objXmlNode
        If .NodeName <> "xml" Then _
          If Not IsNull(.GetAttribute("val")) Then _
            prstrListNodes = prstrListNodes & .GetAttribute("val") & Space$(10) & _
              .NodeName & Space$(10) & .ParentNode.NodeName & vbCr
        If .HasChildNodes Then _
          prcDisplayNode .ChildNodes, prstrListNodes
    End With
Next
End Sub



VBA/HTML - CodeConverter für Office-Foren
AddIn für Excel/Word 2000-2010 - komplett in VBA geschrieben von Lukas Mosimann
Projektbetreuung durch mumpel



Code erstellt und getestet in Office 12

Gruß, Mullit

Anzeige
AW: XML auslesen
31.08.2014 07:38:08
schauan
Hallo Ewald,
wenn Du nur die Werte ab Zeile 2 haben willst, die in Anführungszeichen stehen, braucht man es eventuell nicht so kompliziert auf Basis des xml-Import zu lösen. Ich gehe davon aus, dass es wie in Deinem Post maximal zwei Angaben sind. Die Daten werden in das aktive Tabellenblatt eingetragen, die 5fach-Null wird hier nur als 0 eingetragen - kann man aber anpassen. Für 40 Dateien müsste dann noch eine Schleife drumherum und die Dateneinträge dürfen dann nicht alle in A1 beginnen. ;-)
Ich habe hier ein Beispiel dazu:
Sub test2()
'Variablendeclaration
Dim iFf%, iCnt% 'Integer
Dim strZeile$   'String
Dim arrTmp1     'Variant-Array
'freie Dateinummer zuweisen
iFf = FreeFile
'Dateiname in Zeile 1 eintragen
Cells(1, 1) = "d:\test\test.xls"
'Datei zum lesen oeffnen
Open "d:\test\test.xml" For Input As iFf
'Startzeile festlegen
iCnt = 1
'Schleife, bis zum Dateiende
Do While Not EOF(1)
'Zeile einlesen
Line Input #1, strZeile
'Zeile verarbeiten, wenn = enthalten
If InStr(1, strZeile, "=") > 0 Then
'Daten ab Zeile 2 uebernehmen
If iCnt > 1 Then
arrTmp1 = Split(strZeile, "=")
Cells(iCnt, 1) = Split(arrTmp1(1), Chr(34))(1)
'eventuell zweiten Wert uebernehmen
If UBound(arrTmp1) > 1 Then
Cells(iCnt, 2) = Split(arrTmp1(2), Chr(34))(1)
'Ende eventuell zweiten Wert uebernehmen
End If
'Ende Daten ab Zeile 2 uebernehmen
End If
'Zeilenzaehler hochsetzen
iCnt = iCnt + 1
'Ende Zeile verarbeiten, wenn = enthalten
End If
'Ende Schleife, bis zum Dateiende
Loop
'Datei schließen
Close #1
End Sub

Hoffe geholfen zu haben, Grüße von André (schauan) aus Gera - Excel-97-2013

Anzeige
AW: XML auslesen
31.08.2014 13:26:38
schauan
Hallo Ewald,
wenn Du nur die Werte ab Zeile 2 haben willst, die in Anführungszeichen stehen, braucht man es eventuell nicht so kompliziert auf Basis des xml-Import zu lösen. Ich gehe davon aus, dass es wie in Deinem Post maximal zwei Angaben sind. Die Daten werden in das aktive Tabellenblatt eingetragen, die 5fach-Null wird hier nur als 0 eingetragen - kann man aber anpassen. Für 40 Dateien müsste dann noch eine Schleife drumherum und die Dateneinträge dürfen dann nicht alle in A1 beginnen. ;-)
Ich habe hier ein Beispiel dazu:
Sub test2()
'Variablendeclaration
Dim iFf%, iCnt% 'Integer
Dim strZeile$   'String
Dim arrTmp1     'Variant-Array
'freie Dateinummer zuweisen
iFf = FreeFile
'Dateiname in Zeile 1 eintragen
Cells(1, 1) = "d:\test\test.xls"
'Datei zum lesen oeffnen
Open "d:\test\test.xml" For Input As iFf
'Startzeile festlegen
iCnt = 1
'Schleife, bis zum Dateiende
Do While Not EOF(1)
'Zeile einlesen
Line Input #1, strZeile
'Zeile verarbeiten, wenn = enthalten
If InStr(1, strZeile, "=") > 0 Then
'Daten ab Zeile 2 uebernehmen
If iCnt > 1 Then
arrTmp1 = Split(strZeile, "=")
Cells(iCnt, 1) = Split(arrTmp1(1), Chr(34))(1)
'eventuell zweiten Wert uebernehmen
If UBound(arrTmp1) > 1 Then
Cells(iCnt, 2) = Split(arrTmp1(2), Chr(34))(1)
'Ende eventuell zweiten Wert uebernehmen
End If
'Ende Daten ab Zeile 2 uebernehmen
End If
'Zeilenzaehler hochsetzen
iCnt = iCnt + 1
'Ende Zeile verarbeiten, wenn = enthalten
End If
'Ende Schleife, bis zum Dateiende
Loop
'Datei schließen
Close #1
End Sub

Hoffe geholfen zu haben, Grüße von André (schauan) aus Gera - Excel-97-2013

Anzeige
AW: XML auslesen
31.08.2014 18:07:18
Ewald
Hallo,
erstmal vielen Dank für eure Mühe, wenn ich die Makros anpasse, bekomme ich auch alle Werte.
Nun hat sich jetzt beim Testen rausgestellt, das die ersten zwei Werte manchmal gar keine Hexwerte sind und sich auf die Windowsfarben für Fenster und Schrift beziehen.
Dann gibt es noch die Möglichkeit das entweder die Windowsfarben oder die Farben weiss und schwarz verwendet werden.
Außerdem ist der Index 1+2,sowie 3+4 gegenüber dem Farbauswahldialog vertauscht.
Damit ist das Auslesen der xml zur Farbauslesung der Themen gestorben,weil unbrauchbar.
Für das generelle Auslesen einer xml Datei kommen sie aber ins Archiv.
Habe jetzt einen Code geschrieben der über das laden einer Theme mir dann alle Farben wiedergibt.
Nochmals Dank für eure Hilfe
Gruß Ewald

Anzeige
AW: Fehler aber wo?
01.09.2014 00:59:15
Ewald
Hallo,
muß leider nochmal nachlegen
habe ein mekrwürdiges Verhalten in meinem Code zur Abfrage der Colortheme
wenn ich so abfrage
With Worksheets(9)
myarr = .Range("P3:AA7")
.Cells(Zeile, 1).Value = Left(Dateiname, Len(Dateiname) - 4)
.Cells(Zeile, 2).Value = ThisWorkbook.Theme.ThemeColorScheme.Colors(1)
.Cells(Zeile, 2).Interior.Color = .Cells(Zeile, 2).Value
.Cells(Zeile, 3).Value = ThisWorkbook.Theme.ThemeColorScheme.Colors(2)
.Cells(Zeile, 3).Interior.Color = .Cells(Zeile, 3).Value
.Cells(Zeile, 4).Value = ThisWorkbook.Theme.ThemeColorScheme.Colors(3)
.Cells(Zeile, 4).Interior.Color = .Cells(Zeile, 4).Value
.Cells(Zeile, 5).Value = ThisWorkbook.Theme.ThemeColorScheme.Colors(4)
.Cells(Zeile, 5).Interior.Color = .Cells(Zeile, 5).Value
ist alles in Ordnung.
Nur sind hier die Farbwerte der Spalten 2+3 und 4+5 gegenüber dem Farbauswahldialog vertauscht.
logische Folgerung Index tauschen
With Worksheets(9)
myarr = .Range("P3:AA7")
.Cells(Zeile, 1).Value = Left(Dateiname, Len(Dateiname) - 4)
.Cells(Zeile, 2).Value = ThisWorkbook.Theme.ThemeColorScheme.Colors(2)
.Cells(Zeile, 2).Interior.Color = .Cells(Zeile, 2).Value
.Cells(Zeile, 3).Value = ThisWorkbook.Theme.ThemeColorScheme.Colors(1)
.Cells(Zeile, 3).Interior.Color = .Cells(Zeile, 3).Value
.Cells(Zeile, 4).Value = ThisWorkbook.Theme.ThemeColorScheme.Colors(4)
.Cells(Zeile, 4).Interior.Color = .Cells(Zeile, 4).Value
.Cells(Zeile, 5).Value = ThisWorkbook.Theme.ThemeColorScheme.Colors(3)
.Cells(Zeile, 5).Interior.Color = .Cells(Zeile, 5).Value
nun passiert aber folgendes Spalte 2+3 ist korrekt, nur in Spalte 4+5 bekomme ich den gleichen Farbwert.
Aber warum?
Gruß Ewald

Anzeige
AW: Fehler aber wo?
01.09.2014 17:18:22
Ewald
Hallo,
hat sich erledigt,kann jetzt alle Themes mit den jeweils 72 Farben darstellen.
Gruß Ewald

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige