Microsoft Excel

Herbers Excel/VBA-Archiv

Informationen und Beispiele zum Thema MsgBox
BildScreenshot zu MsgBox MsgBox-Seite mit Beispielarbeitsmappe aufrufen

XML auslesen

Betrifft: XML auslesen von: Ewald
Geschrieben am: 29.08.2014 18:32:01

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

  

Betrifft: AW: XML auslesen von: schauan
Geschrieben am: 29.08.2014 19:57:20

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


  

Betrifft: AW: XML auslesen von: Ewald
Geschrieben am: 29.08.2014 22:46:02

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


  

Betrifft: AW: XML auslesen von: Mullit
Geschrieben am: 29.08.2014 23:57:42

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ß,


  

Betrifft: AW: XML auslesen von: Ewald
Geschrieben am: 30.08.2014 00:57:38

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


  

Betrifft: AW: XML auslesen von: Ewald
Geschrieben am: 30.08.2014 13:30:53

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


  

Betrifft: AW: XML auslesen von: Mullit
Geschrieben am: 30.08.2014 16:07:33

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


  

Betrifft: AW: XML auslesen von: Mullit
Geschrieben am: 31.08.2014 00:03:24

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


  

Betrifft: AW: XML auslesen von: schauan
Geschrieben am: 31.08.2014 07:38:08

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


  

Betrifft: AW: XML auslesen von: schauan
Geschrieben am: 31.08.2014 13:26:38

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


  

Betrifft: AW: XML auslesen von: Ewald
Geschrieben am: 31.08.2014 18:07:18

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


  

Betrifft: AW: Fehler aber wo? von: Ewald
Geschrieben am: 01.09.2014 00:59:15

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


  

Betrifft: AW: Fehler aber wo? von: Ewald
Geschrieben am: 01.09.2014 17:18:22

Hallo,

hat sich erledigt,kann jetzt alle Themes mit den jeweils 72 Farben darstellen.

Gruß Ewald


 

Beiträge aus den Excel-Beispielen zum Thema "XML auslesen"