Jeg har satt sammen et grunnleggende skript for å sende en XML -streng eller fil til en webserver ved hjelp av Excel VBA og et enkelt PHP -script for å motta dataene. Prosessen bruker XMLHTTP.
Målet er å lage et enkelt opplastingsskript for å oppdatere en server med XML -data opprettet fra et regneark. Deretter må flere sluttbruker -arbeidsbøker tilordnes til den sentrale filen og lage rapporter fra den. De grunnleggende muttere og bolter:
For eksempel bruker jeg en grunnleggende XML -streng som ser slik ut:
1234567891011 | myxml = "<? xml version =" "1.0" "?>" & _"" & _"herre polo" & _"4.89" & _"stor" & _"" |
PHP -en jeg har brukt, returnerer ganske enkelt dataene den ble sendt tilbake til Excel. Så hvis du mottar de samme XML -dataene du sendte i en meldingsboks, har du gjort det riktig. Hvis det ikke blir funnet innleggsdata, står det "ingen terninger". Plasseringen av testadressen er /pl/xlxml.php
Tydeligvis vil du oppdatere skriptet for å lagre filinnholdet på serveren din for praktisk bruk. Her er PHP for å motta XML -postdataene og returnere dem:
1234567891011121314151617 |
Så vi vet nå hva vi sender, og hvordan vi kan motta det, la oss sende XML -dataene!
Følgende kode ble opprettet i Excel 2003 og med en referanse til Verktøy-> Referanser-> Microsoft XML v5.0 i VB-editoren. Det er godt kommentert, slik at du kan se alt som skjer:
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687 | Sub SendXML ()'HTTP -variabelDim myHTTP som MSXML2.XMLHTTP'HTTP -objektAngi myHTTP = CreateObject ("msxml2.xmlhttp")'opprett dom dokumentvariabel'lagrer xml -filen som skal sendesDim myDom som MSXML2.DOMDocument'Opprett DomDocument -objektetSett myDom = CreateObject ("MSXML2.DOMDocument")'Legg i hele dokumentet før du går videremyDom.async = Feil'xml strengvariabel'erstatt med plassering hvis du sender fra fil eller URLDim myxml som strengmyxml = "<? xml version =" "1.0" "?>" & _"" & _"herre polo" & _"4.89" & _"stor" & _""'laster xml'endre til .Last for fil eller nettadressemyDom.loadXML (myxml)'åpne forbindelsenmyHTTP.Åpne "innlegg", _"https://www.automateexcel.com/excel/pl/xlxml.php", usant'send XMLmyHTTP.Send (myDom.XML)'Vis svaretMsgBox myHTTP.ResponseTextSlutt Sub |
Hvis du har kommet så langt, lagt til en referanse og kjørt koden, vil du se at PHP faktisk mottok og returnerte XML:
Merknader: Jeg har bare dynamisk opprettet XML eller lastet den fra XML -filer og URL -er. Neste er å sende data fra et XML -kart.
Jeg gjentok dataene tilbake til Excel i stedet for å skrive dem til serveren fordi URL -en er offentlig, jeg ønsket å gi folk en sandkasse og ikke ha tilfeldige filer sendt til serveren min.