04. maj 2005 - 15:48Der er
14 kommentarer og 1 løsning
Exporterer til xml
Hej Jeg skal have eksporteret en excel2000 regneark til xml. Brugeren skal bruge excel som han plejer, men når han trykker på en knap(makro), skal excel så konverterer informationerne til den struktur jeg har oprettet min xml i, og derefter skal excel eksporterer dataene til xml. Men hvordan skal koden se ud?
Jeg vil her prøve at beskrive hver af filene:
Excel 2000: Ark1: Her skal kontaktlisten med: afdeling, navn, stilling, telefonnr, ansat pr dato, og email stå. Det er så her at arbejdsområdet for den der skal indtaste oplysningerne skal arbejde. Ark2: Her skal informationerne fra kontaktlisten så indføres i den struktur jeg har defineret i min xml.
XML-filen har følgende struktur: <personale> <liste> <afdeling>[info fra excel afdeling]</afdeling> <navn>[info fra excel navn]</navn> <stilling>[info fra excel stilling]</stilling> <ansat>[info fra excel ansat pr]</ansat> <tlfnr>[info fra excel telefon]</tlfnr> <email>[info fra excel email]</email> <billede>[henter billide fra mappe]</billede> </liste> </afdeling>
Når bruger har indtastet de oplysninger han skal, skal han trykke på en Opdatér-knap (der er på ark1) og alle felterne bliver opdateret i ark2, hvorefter xml'en også bliver opdateret. Det skal så siges at når en person bliver slettet fra listen, så skal denne selvfølgelig også slettet fra xml'en.
Jeg håber der en der kan hjælpe med denne makro...?
I ark2 har du en liste med 6 kolonner (Afd,navn, stilling,tlf,email og sti til billede) og derunder har alle ansatte. Overskrifter i A1:F1 og ansatte nedad derfra.
Denne makro kan så lave eksporten til en xlm-fil
Sub MakeXMLfile() Dim objXMLDOM As Object 'DOMDocument40 Dim objPI As Object 'IXMLDOMProcessingInstruction Dim objListe As Object Dim wsh As Worksheet Dim rngData As Range Dim rngCell As Range
Set wsh = Worksheets("Data") 'opret forbindelse til XML-objectet Set objXMLDOM = CreateObject("Microsoft.XMLDOM") 'lav processing-instruktioner Set objPI = objXMLDOM.createProcessingInstruction( _ "xml", "version='1.0' encoding='UTF-8'") 'find antallet af rækker, der skal eksporteres Set rngData = wsh.Range("A2:A" & wsh.Range("A65536").End(xlUp).Row) 'opret elementet PERSONALE Set objXMLDOM.documentElement = objXMLDOM.createElement("Personale") 'Opret elementet LISTE Set objListe = objXMLDOM.createElement("Liste") 'Indsæt Processing instruktioner objXMLDOM.insertBefore objPI, objXMLDOM.childNodes.Item(0) 'opret resten af elementerne objListe.appendChild objXMLDOM.createElement("Afdeling") objListe.appendChild objXMLDOM.createElement("Navn") objListe.appendChild objXMLDOM.createElement("Stilling") objListe.appendChild objXMLDOM.createElement("Telefon") objListe.appendChild objXMLDOM.createElement("Email") objListe.appendChild objXMLDOM.createElement("Billede") 'indsæt underelementerne fra excel i listen For Each rngCell In rngData objListe.childNodes(0).Text = rngCell.Text objListe.childNodes(1).Text = rngCell.Offset(, 1).Text objListe.childNodes(2).Text = rngCell.Offset(, 2).Text objListe.childNodes(3).Text = rngCell.Offset(, 3).Text objListe.childNodes(4).Text = rngCell.Offset(, 4).Text objListe.childNodes(5).Text = rngCell.Offset(, 5).Text 'indsæt dem objXMLDOM.documentElement.appendChild objListe.CloneNode(True) Next 'Gem som XML-fil objXMLDOM.Save (ThisWorkbook.Path & "\myXML1.xml") 'Ryd op Set objPI = Nothing Set objXMLDOM = Nothing Set objListe = Nothing End Sub
Hej bak! Når der skal være flere niveauer i xml-filen, er nedenstående så den bedste måde at gøre det på (med et yderligere objekt):
...
'Opret elementet LISTE Set objListe = objXMLDOM.createElement("Liste") 'opret resten af elementerne objListe.appendChild objXMLDOM.createElement("Afdeling") objListe.appendChild objXMLDOM.createElement("Navn") objListe.appendChild objXMLDOM.createElement("Stilling")
'Opret elementet HALLO Set objHallo = objXMLDOM.createElement("Hallo") 'opret resten af elementerne objHallo.appendChild objXMLDOM.createElement("Telefon") objHallo.appendChild objXMLDOM.createElement("Email") objHallo.appendChild objXMLDOM.createElement("Billede")
'indsæt underelementerne fra excel i listen For Each rngCell In rngData objListe.childNodes(0).Text = rngCell.Text objListe.childNodes(1).Text = rngCell.Offset(, 1).Text objListe.childNodes(2).Text = rngCell.Offset(, 2).Text 'indsæt dem objXMLDOM.documentElement.appendChild objListe.CloneNode(True)
objHallo.childNodes(0).Text = rngCell.Offset(, 3).Text objHallo.childNodes(1).Text = rngCell.Offset(, 4).Text objHallo.childNodes(2).Text = rngCell.Offset(, 5).Text 'indsæt dem objXMLDOM.documentElement.appendChild objHallo.CloneNode(True) Next
...
Hvis du skulle have et eksempel ved hånden på en anden, mere fornuftig måde at gøre det på er der også 100 pt fra mig.
Hej bak! Meget gerne, jeg kan ikke få det til at funke når jeg laver loopet. Den smider kun data rigtigt ind under det første gennemløb. Min indsigt i DOM er begrænset, så hvis du vil, smider jeg points i et spm til dig.
Iøvrigt, jeg har været hele nettet igennem og talt med boghandlere om noget vb(a)/DOM uden held. Du skulle vel ikke kende en fornuftig kilde?
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.