• Privacywetgeving
    Het is bij Helpmij.nl niet toegestaan om persoonsgegevens in een voorbeeld te plaatsen. Alle voorbeelden die persoonsgegevens bevatten zullen zonder opgaaf van reden verwijderd worden. In de vraag zal specifiek vermeld moeten worden dat het om fictieve namen gaat.

Meerdere grote XML bestanden als batch inlezen in excel

Status
Niet open voor verdere reacties.

Paradoxx

Gebruiker
Lid geworden
2 nov 2007
Berichten
135
Goedemiddag,

Bij ons op het bedrijf hebben we een tarreerlijn welke na ieder gecontroleerd monster een XML bestand wegschrijft. Als ik dit XML bestand inlees in een Exceltabel (via de XML gegevensimport functie), dan heeft de tabel 58 kolommen en 56 rijen.
Omdat de gegevens die ik eruit wil halen verspreid over de tabel staan, heb ik een via een hulpblad deze gegevens op 1 regel staan.

Ik start nu een macro die de windows verkenner opent zodat men handmatig het XML bestand kan inlezen.
Deze regel van het hulpblad wordt gekopieerd naar een verzamelblad, zodat ik makkelijk via een filter, een draaitabel of draaigrafiek die data naar boven kan halen over 1 bepaalde partij.
Een volgende regel wordt op dat verzamelblad onder de laatste gevulde regel weggeschreven.

Om dit allemaal 1 voor 1 te doen word nu een beetje te gek. Ik zou graag willen weten hoe ik de macro zo kan aanpassen dat ik in plaats van 1 bestand, alle xml bestanden tegelijk uit een map kan verwerken.
Alle XML bestanden worden apart in een map per dag weggeschreven.

Bijgevoegd het bestand wat ik nu gebruik, ontdaan van namen. Ik ben geen programmeur, maar een "door vallen en opstaan leert men" beginner VBA.
 

Bijlagen

  • XML_DB.xlsm
    40,7 KB · Weergaven: 40
Staan de gegevens van Naam4 en Naam7 altijd in de te importeren XML-bestanden ?
Kan 'Kiemkracht' een andere waarde krijgen dan 8 ?
Kan 'Vitaliteit' een ander waarde krijgen dan 7 ?

Waarom beperk je het importschema niet tot de 12 velden die je nodig hebt ?
 
Laatst bewerkt:
Staan de gegevens van Naam4 en Naam7 altijd in de te importeren XML-bestanden ?
Ja, deze staan in elk XML bestand. Afhankelijk van het type monster worden hier gegevens gevuld en waardes aan toegekend

Kan 'Kiemkracht' een andere waarde krijgen dan 8 ?
Ja, Kiemkracht wordt geschaald op hele getallen van 3 /tm 8

Kan 'Vitaliteit' een ander waarde krijgen dan 7 ?
Ja, Vitaliteit wordt geschaald op hele getallen van 3 t/m 8

Waarom beperk je het importschema niet tot de 12 velden die je nodig hebt ?
Importschema, hier ben ik onvoldoende bekend mee. Wanneer 1 van de velden niet beschikbaar zou zijn in het importschema, struikelt Excel daar niet over?

Ik zal eens verder gaan kijken naar het importschema waar je het over hebt...en of dit van toepassing kan zijn voor dit bestand...
 
Waarom beperk je het importschema niet tot de 12 velden die je nodig hebt ?

Ik begrijp wat je zegt betreffende het importschema. Maar ik zit nog steeds met die herhalende XML elementen waardoor ik toch weer niet direct de gegevens op 1 regel heb staan, welke ik kan toevoegen aan een totaallijst.
Waar het mij om gaat is dat ik na de import en kopieerstap automatisch het volgende xml bestand in de map kan verwerken. Hoe krijg ik die lus er in... ?
 
Dat kun je niet los zien van het importschema.

De eenvoudigste manier is het schema te koppelen aan een bestand met 1 naam; bijv. G:\OF\import_snb.XML
Vervolgens ga je alle te importeren XML bestanden in een lus:
- per bestand kopiëren of hernoemen als G:\OF\import_snb.XML
- de XML-koppeling verversen
- de eerste regel uit de ververste XML-tabel kopiëren naar het verzamelwerkblad

Op die manier blijft de XML-importkoppeling ongewijzigd in stand. Alleen het gekoppelde bestand wordt gewijzigd.
Daarom is de reductie van het XML-importschema zo van bealng, omdat je dan die tussenstap naar het verzamelbestand kunt overslaan.
Daarom blijven de door jou onbeantwoorde vragen ook nog relevant.
 
Daarom blijven de door jou onbeantwoorde vragen ook nog relevant.

Zie post #3, heb daar alle vragen beantwoord volgens mij. :)

- de eerste regel uit de ververste XML-tabel kopiëren naar het verzamelwerkblad
Wanneer ik een importschema maak en ik wil de waarde voor de kiemkracht en vitaliteit ophalen, moet ik Naam/Waarde van kwaliteitsgegevens Tafel 2 en tafel 3 ophalen, omdat dit daarvan componenten zijn. Maar dat zijn herhalende componenten dus zal ik niet de gegevens van de eerste regel kunnen halen..
Of is het zo simpel door gewoon de cellen naar beneden te verplaatsen ter hoogte van het gewenste component?

xml schema.png
 
Het is wat lastig beoordelen, omdat ik geen XML-bestanden heb.
Als als je er als voorbeeld 2 kunt plaatsen kunnen we de hele routine maken.
 
In de bijlage heb ik 8 xml berichten toegevoegd. Allen ontdaan van namen. Namen zijn vervangen door test 1, test 2, enz.
 

Bijlagen

  • Test XML.zip
    11,4 KB · Weergaven: 29
Hierbij het bestand zoals het ook kan:
 

Bijlagen

  • 0_XML_DB.xlsm
    28,6 KB · Weergaven: 54
Ik zie dat het bij je is gelukt, maar hier loopt de macro niet.
Foutmelding: "Fout 5 tijdens uitvoering: Ongeldige prcedure-aanroep of ongeldig argument".
Heeft dit wellicht met de locatie van de mapping te maken?
Loopt fout bij
Code:
Sub Macro1()
    ActiveWorkbook.XmlMaps("Monster_toewijzing").DataBinding.Refresh
End Sub

Heb bestandslocatie in sub M_snb, c00 al wel gewijzigd in lokale map...
 
Kijk naar de macro in de macromodule van Blad1.
 
Kijk naar de macro in de macromodule van Blad1.

Je bedoelt deze...
Code:
Sub M_snb()
    c00 = "G:\OF\klimaat\"
    c01 = Dir(c00 & "*.XML")
    c02 = ThisWorkbook.XmlMaps("Monster_toewijzing").DataBinding.SourceUrl
    
    Do Until c01 = ""
        FileCopy c00 & c01, c02
        ThisWorkbook.XmlMaps("Monster_toewijzing").DataBinding.Refresh
        Blad2.ListObjects(1).DataBodyRange.Rows(1).Copy Blad4.Cells(Rows.Count, 1).End(xlUp).Offset(1)
        Blad4.Cells(Rows.Count, 1).End(xlUp).Offset(, 11) = Blad2.Cells(4, 12).Value
        c01 = Dir
    Loop
End Sub

Ik heb deze eerst als zodanig geprobeerd. Daar kreeg ik de foutmelding bij importeren XML dat er geen bron gevonden kon worden. Daarom had ik voor c00 al mijn lokale pad opgegeven, maar dat mocht ook niet baten.
 
En toch is dat de crux. Heb je dat pad met de XML bestanden wel goed ingevoerd ?
En voer daarna de macro uit in de VBEditor met F8 (stap-voor-stap).
 
Daar ga ik nu aan twijfelen.
Ik zal het dadelijk nog eens proberen...
Ik moet eerst nog even wat andere aanpassingen van ons ERP testen voordat ik op vakantie mag... :cool:
 
En toch is dat de crux. Heb je dat pad met de XML bestanden wel goed ingevoerd ?
En voer daarna de macro uit in de VBEditor met F8 (stap-voor-stap).

Ik heb het gecontroleerd en het pad is goed, Ik heb de macro stap voor stap doorlopen en bij de FileCopy c00 & c01, c02 statement gaat ie de fout in omdat het pad niet gevonden kan worden.
Daarna even via mouse-over bekeken hoe de verwijzingen liggen, en bij c02 blijft deze naar het pad op jouw pc verwijzen. zie afbeelding.

mapping locatie.png
 
Zo kun je de 'sourceURL' van het importschema wijzigen:

Code:
Sub M_tst()
    c00 = "Y:\anders\"
    c02 = ThisWorkbook.XmlMaps("Monster_toewijzing").DataBinding.SourceUrl
    MsgBox "zorg dat het bestand " & c00 & Dir(c02) & " bestaat"
    
    ThisWorkbook.XmlMaps("Monster_toewijzing").DataBinding.ClearSettings
    ThisWorkbook.XmlMaps("Monster_toewijzing").DataBinding.LoadSettings c00 & Dir(c02)
End Sub
 
Sorry dat het wat langer duurde SNB, vakantie en wat persoonlijke dingen die belangrijker waren.

Bedankt voor de input, ik ga nu proberen of die doet wat ik wil... ;)
 
Bedankt voor de input snb!

Ik heb de XMLmapping even opnieuw aangemaakt in het bestand en nu werkt het.
Nu even de code aanpassen op de daadwerkelijke situatie, maar dat moet gaan lukken.
 
Status
Niet open voor verdere reacties.
Steun Ons

Nieuwste berichten

Terug
Bovenaan Onderaan