xml-to-excel-via-url
#11
Hallo,

zuerst vielen Dank an Zwenn.

Mit den hier im Forum gezeigten xml-Code in #1 konnte ich den Code nicht nachvollziehen, im Herber.Forum habe ich keine andere XML-Datei gefunden.

Wäre es möglich einen link zu setzen?

Vielen Dank

mfg
Top
#12
Oder:


Code:
Sub M_snb()
    With CreateObject("MSXML2.DOMDocument")
        .Load "G:\OF\XML_document.xml"
        c00 = .getElementsByTagName("jobkey")(0).Text
        c01 = .getElementsByTagName("jobtitle")(0).Text
        c02 = .getElementsByTagName("url")(0).Text
    End With
End Sub

Die erste 10 Werten:

Code:
Sub M_snb()
    sp = Split("jobkey jobtitle url")
    
    With CreateObject("MSXML2.XMLhttp")
        .Open "get", "G:\OF\XML_document.xml", False
        .send
        sn = Split(.responseText, vbCrLf)
        
        For j = 0 To 2
           c00 = c00 & vbLf & Join(Filter(Split(Replace(Replace(Join(Filter(sn, sp(j)), vbLf), "<" & sp(j) & ">", ""), "</" & sp(j) & ">", "", , 10), vbLf), sp(j), 0), vbLf)
        Next
    End With
    
    MsgBox c00
End Sub
Zum übersetzen von Excel Formeln:

http://dolf.trieschnigg.nl/excel/index.p...gids=en+de
Top
#13
@snb

Danke, die 2. Variante läuft!

Die 1. Variante bricht in der Zeile "c00 =" mit der Fehlermeldung "Objektvariable oder With-Blockvariable nicht festgelegt" ab.

Auch mit "CreateDocument("MSXML2.DOMDocument.6.0") gibt es dieselbe Fehlermeldung.

Version MSOffice 2016, AddIn "Actions Pane 3" ist auf der HD vorhanden, wird aber in den Excel-Optionen ohne Pfad angezeigt.

mfg
Top
#14
@Fen

1. Variant: stimmt Fullname ?



Code:
Sub M_snb()
  With CreateObject("MSXML2.DOMDocument")
    .Load "G:\OF\XML_document.xml"
    MsgBox Join(Array(.getElementsByTagName("jobkey")(0).Text, .getElementsByTagName("jobtitle")(0).Text, .getElementsByTagName("url")(0).Text), vbLf)
  End With
End Sub

Hier läufts's tadellos mit angehängte Datei:


Angehängte Dateien
.zip   XML_Document.zip (Größe: 362 Bytes / Downloads: 3)
Zum übersetzen von Excel Formeln:

http://dolf.trieschnigg.nl/excel/index.p...gids=en+de
Top
#15
@snb

ja es geht jetzt (teilweise)

Ich hatte wohl das abschließende nicht mit kopiert.

Der Versuch mehrere Werte zu lesen ging schief, es wurde auch in Zwenn's Code nur der erste Wert gelesen.

Hier mein Versuch den Code anzupassen mit den Quelldaten:

Code:
Sub M_snb()
Debug.Print Dir(url)
    With CreateObject("MSXML2.DOMDocument")
        .Load url
        c00 = .getElementsByTagName("jobkey")(0).Text
        c01 = .getElementsByTagName("jobtitle")(0).Text
        c02 = .getElementsByTagName("url")(0).Text
        
       Set kn_res = .getElementsByTagName("result")
      
       For Each kn In kn_res
        Set jobk = kn.getElementsByTagName("jobkey") '(0)
            For Each jb In jobk
                Debug.Print jb.Text
            Next jb
       Next kn
      
        Set jbk = .getElementsByTagName("jobkey")
        For Each jb In jbk
            Debug.Print jb.Text
        Next jb
    End With
    
    Debug.Print c00, c01, c02
End Sub

########################

<response version="2">
<query>Q1</query>
<location></location>
<totalresults></totalresults>
<start></start>
<end></end>
<results>
<result>
<jobkey>WERT1</jobkey>
<jobtitle>WERT2</jobtitle>
<company></company>
<city></city>
<state></state>
<country></country>
<formattedLocation></formattedLocation>
<source></source>
<date></date>
<snippet></snippet>
<url>WERT3</url>
<onmousedown></onmousedown>
<logo></logo>
</result><result>
<jobkey>WERT10</jobkey>
<jobtitle>WERT20</jobtitle>
<company></company>
<city></city>
<state></state>
<country></country>
<formattedLocation></formattedLocation>
<source></source>
<date></date>
<snippet></snippet>
<url>WERT30</url>
<onmousedown></onmousedown>
<logo></logo>

</result>
</results>
</response>

mfg
Top
#16
Hallo Fennek,

ich baue grade Möbel bei meiner Freundin auf. Deshalb nur kurz.

Das XML muss wohlgeformt sein nehme ich an. Deshalb muss man das Beispiel aus #1 etwas bearbeiten. Man kann sich noch mehr (völlständige) result Einträge erzeugen und das usw. muss natürlich raus. Ich hatte da keine Lust zu. Deswegen fehlt bei mir die Begrenzung auf die ersten 10. Das vorhandene Beispiel habe ich mir mit dem https://beautifier.io/ aufbereitet. Das funktioniert ganz gut, wenn man oben links HTML einstellt.
[url=https://beautifier.io/][/url]
Code:
<response version="2">
   <query></query>
   <location></location>
   <totalresults></totalresults>
   <start></start>
   <end></end>
   <results>
       <result>
           <jobkey>WERT1.1 Jobkey</jobkey>
           <jobtitle>WERT1.2 Jobtitle</jobtitle>
           <company></company>
           <city></city>
           <state></state>
           <country></country>
           <formattedLocation></formattedLocation>
           <source>
           </source>
           <date></date>
           <snippet></snippet>
           <url>WERT1.3 url</url>
           <onmousedown></onmousedown>
           <logo></logo>
       </result>
       <result>
           <jobkey>WERT2.1 Jobkey</jobkey>
           <jobtitle>WERT2.2 Jobtitle</jobtitle>
           <company></company>
           <city></city>
           <state></state>
           <country></country>
           <formattedLocation></formattedLocation>
           <source>
           </source>
           <date></date>
           <snippet></snippet>
           <url>WERT2.3 url</url>
           <onmousedown></onmousedown>
           <logo></logo>
       </result>
   </results>
</response>
Dieser XML Code als Datei abgelegt funktioniert mit meinem Code. Die Beispiele von dir snb schaue ich mir gerne an, wenn ich wieder Zeit habe Smile

Viele Grüße,

Zwenn
Top
#17
@Fen:


Code:
Sub M_snb()
  With CreateObject("MSXML2.DOMDocument")
    .Load "G:\OF\XML_document.xml"
    For j = 0 To .getElementsByTagName("jobkey").Length - 1
      MsgBox Join(Array(.getElementsByTagName("jobkey")(j).Text, .getElementsByTagName("jobtitle")(j).Text, .getElementsByTagName("url")(j).Text), vbLf)
    Next
  End With
End Sub


Angehängte Dateien
.zip   XML_Document.zip (Größe: 416 Bytes / Downloads: 2)
Zum übersetzen von Excel Formeln:

http://dolf.trieschnigg.nl/excel/index.p...gids=en+de
Top
#18
Danke!

Ich kannte ".Length" nicht.

Jetzt kann ich beide Codes (snb, Zwenn) nachvollziehen.

mfg
Top
#19
Eine alternative Vorgehensweise:


Code:
Sub M_snb()
  With CreateObject("MSXML2.DOMDocument")
    .Load "G:\OF\XML_document.xml"
    For Each it In .getElementsByTagName("jobkey")
      MsgBox it.Text
    Next
    For Each it In .getElementsByTagName("jobtitle")
      MsgBox it.Text
    Next
    For Each it In .getElementsByTagName("url")
      MsgBox it.Text
    Next
        
    For j = 0 To .getElementsByTagName("jobkey").Length - 1
      MsgBox Join(Array(.getElementsByTagName("jobkey")(j).Text, .getElementsByTagName("jobtitle")(j).Text, .getElementsByTagName("url")(j).Text), vbLf)
    Next
  End With
End Sub
Zum übersetzen von Excel Formeln:

http://dolf.trieschnigg.nl/excel/index.p...gids=en+de
Top
#20
Hallo, :19:

Alternativ (für Wert1, Wert2 und Wert3): :21:

Code:
Option Explicit
Public Sub Main()
    Const strFile As String = "C:\Temp\XML_Document1.xml"
    Workbooks.OpenXML strFile
    Workbooks(Dir$(strFile)).Worksheets(1).Range("K3,L3,R3").Copy Tabelle1.Range("A1")
    Workbooks(Dir$(strFile)).Close False
End Sub
Top


Gehe zu:


Benutzer, die gerade dieses Thema anschauen: 1 Gast/Gäste