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