vbamania.pl
login:
hasło:
 
  *Rejestracja *Zapomniane hasło
 Dziś jest piątek, 19 kwietnia 2024 roku.
Ustaw jako stronę startową Ulubione Napisz
PowrótPowrót do serwisu  RegulaminRegulamin rssRSS

  tytuł wątku:
Wątki dyskusji

Pobieranie danych z pliku XML


otwartyotwarty rozpoczął: grzegorz0379 postów: 10



napisał: admin
postów: 613


umieszczony:
22 stycznia 2021
06:11

edytowany:
22 stycznia 2021
20:35

  
Cześć,

da się, oczywiście.

Sub XML2()
 
Dim oXML
Const sXLMPath As String = "ścieżka_do_Sprawozdanie3.xml"

Set oXML = CreateObject("MSXML2.DOMDocument")
oXML.async = True
If Not oXML.Load(sXLMPath) Then Exit Sub

MsgBox oXML.getElementsByTagName("Pozycje").Item(0).SelectSingleNode("Pozycja[KontoP2='01008']").SelectSingleNode("PL").nodeTypedValue
MsgBox oXML.getElementsByTagName("Pozycje").Item(0).SelectSingleNode("Pozycja[KontoP2='01009']").SelectSingleNode("PL").nodeTypedValue

Set oXML = Nothing

End Sub



pozdrawiam
admin

Cytat:
Cześć, a czy da się trafić bezpośrednio do linii w której KontoP2 ma wartość 01008 i odczytać PL w tej linii.

Chodzi o to, że muszę odszukiwać różne wartości w KontoP2 i wyświetlać wartości PL w tej linii i puszczanie cały czas pętli dla kolejnych szukanych wartości KontoP2 bardzo by zamulało.

Chodzi mi o to żeby nie było pętli typu przeszukaj wszystkie linie i jak KontoP2 równa się 01008 to podaj PL, a potem znowu przeszukaj wszystkie linie i jak KontoP2 równa się 01001 to podaj PL.

Tylko żeby było, podaj PL dla KontoP2 (01008), podaj PL dla KontoP2(01001)

napisał: grzegorz0379
postów: 76


umieszczony:
16 stycznia 2021
18:55

  
Cześć, a czy da się trafić bezpośrednio do linii w której KontoP2 ma wartość 01008 i odczytać PL w tej linii.

Chodzi o to, że muszę odszukiwać różne wartości w KontoP2 i wyświetlać wartości PL w tej linii i puszczanie cały czas pętli dla kolejnych szukanych wartości KontoP2 bardzo by zamulało.

Chodzi mi o to żeby nie było pętli typu przeszukaj wszystkie linie i jak KontoP2 równa się 01008 to podaj PL, a potem znowu przeszukaj wszystkie linie i jak KontoP2 równa się 01001 to podaj PL.

Tylko żeby było, podaj PL dla KontoP2 (01008), podaj PL dla KontoP2(01001)
napisał: admin
postów: 613


umieszczony:
12 grudnia 2020
07:28

edytowany:
12 grudnia 2020
16:11

  
nazwa pliku rozmiar
Sprawozdanie3.xml 921 B

Cytat:
Już problem nieaktualny. Znalazłem rozwiązanie tj. Getattribute :)


Cześć,
dopiero teraz przeczytałem Twoje posty.
Ale może komuś będzie potrzebne:

Option Explicit

Const sXLMPath As String = "ścieżka_do_Sprawozdanie3.xml"

Sub XML()
 
Dim oXML
Dim oPositions
Dim oNode
Dim oHead
Dim oHeadAtt

Set oXML = CreateObject("MSXML2.DOMDocument")
oXML.async = True
If Not oXML.Load(sXLMPath) Then Exit Sub

Set oPositions = oXML.getElementsByTagName("Pozycje")

Dim c As Long: c = 0
Dim w As Long: w = 0

For Each oHead In oPositions(0).ChildNodes(0).ChildNodes
    Range("A1").Offset(0, c).Value = oHead.BaseName
    c = c + 1
    If oHead.nodeName = "KontoP1" Then Range("A1").Offset(0, c).Value = "ID" & " " & oHead.nodeName: c = c + 1
Next oHead

For Each oNode In oPositions(0).ChildNodes
    c = 0
    For Each oHead In oNode.ChildNodes
    
        Range("A2").Offset(w, c).Value = oHead.nodetypedvalue
        c = c + 1
        
        If oHead.nodeName = "KontoP1" Then
            Set oHeadAtt = oHead.Attributes.getNamedItem("ID")
            If Not oHeadAtt Is Nothing Then Range("A2").Offset(w, c).Value = oHeadAtt.Text Else Range("A2").Offset(w, c).Value = "#no ID"
            c = c + 1
        End If

    Next oHead
    
    w = w + 1
  
Next oNode

Set oPositions = Nothing
Set oNode = Nothing
Set oHead = Nothing

End Sub



admin
napisał: grzegorz0379
postów: 76


umieszczony:
11 grudnia 2020
09:25

  
Już problem nieaktualny. Znalazłem rozwiązanie tj. Getattribute :)
napisał: grzegorz0379
postów: 76


umieszczony:
11 grudnia 2020
08:28

  
Witam, będę bardzo wdzięczny za pomoc w tej kwestii. Przeszukałem już pół internetu i nie potrafię sobie poradzić z taką pierdołą.
napisał: grzegorz0379
postów: 76


umieszczony:
9 grudnia 2020
12:36

  
I analogicznie czy np. KontoP1 ma ID i jeśli tak to jakie jest to ID
napisał: grzegorz0379
postów: 76


umieszczony:
9 grudnia 2020
11:32

  
Witam, a czy jest możliwość sprawdzenia czy w tym pliku <RZiS> ma ID i odczytania tego ID?
napisał: grzegorz0379
postów: 76


umieszczony:
17 listopada 2020
13:56

  
Piękne dzieło, wielkie dzięki. Bardzo mi pomogłeś:)
napisał: admin
postów: 613


umieszczony:
15 listopada 2020
20:55

edytowany:
17 listopada 2020
21:26

  
Cześć,

oto rozwiązanie:

Option Explicit

Const sXLMPath As String = "ścieżka_do_Sprawozdanie3.xml"

Sub XML()
 
Dim oXML
Dim oPositions
Dim oNode
Dim oHead

Set oXML = CreateObject("MSXML2.DOMDocument")
oXML.async = True
If Not oXML.Load(sXLMPath) Then Exit Sub

Set oPositions = oXML.getElementsByTagName("Pozycje")

Dim c As Long: c = 0
Dim w As Long: w = 0

For Each oHead In oPositions(0).ChildNodes(0).ChildNodes
    Range("A1").Offset(0, c).Value = oHead.BaseName
    c = c + 1
Next oHead

For Each oNode In oPositions(0).ChildNodes
    c = 0
    For Each oHead In oNode.ChildNodes
        Range("A2").Offset(w, c).Value = oHead.nodetypedvalue
        c = c + 1
    Next oHead
    
    w = w + 1
  
Next oNode

Set oPositions = Nothing
Set oNode = Nothing
Set oHead = Nothing

End Sub



pozdrawiam
admin


Cytat:
Witam,

Nie potrafię się dobrać do takiego XML. Chciałbym do excela zaczytywać same pozycje. Np. żeby w wierszu 1 były nagłówki pozycji: w komórce A1 KontoP1, w B1 KontoP2, w C1 Konto P3, w D1 - Konto P4.

W potem w wierszu 2 w komórce A2 żeby było 010, w B2 01008, w C2 626, w D2 1 000,00
W wierszu 3 w komórce A3 żeby było 010, w B3 01009, w C3 650, w D3 2 000,00

itd ... jeśli będzie więcej pozycji

Gorąca prośba o pomoc.

Pozdrawiam



napisał: grzegorz0379
postów: 76


umieszczony:
14 listopada 2020
21:12

  
nazwa pliku rozmiar
Sprawozdanie3.xml 914 B

Witam,

Nie potrafię się dobrać do takiego XML. Chciałbym do excela zaczytywać same pozycje. Np. żeby w wierszu 1 były nagłówki pozycji: w komórce A1 KontoP1, w B1 KontoP2, w C1 Konto P3, w D1 - Konto P4.

W potem w wierszu 2 w komórce A2 żeby było 010, w B2 01008, w C2 626, w D2 1 000,00
W wierszu 3 w komórce A3 żeby było 010, w B3 01009, w C3 650, w D3 2 000,00

itd ... jeśli będzie więcej pozycji

Gorąca prośba o pomoc.

Pozdrawiam


<-wstecz  1  dalej->
wszystkich stron: 1


Sortuj posty: z