Top-Themen

AppleEntwicklungHardwareInternetLinuxMicrosoftMultimediaNetzwerkeOff TopicSicherheitSonstige SystemeVirtualisierungWeiterbildungZusammenarbeit

Aktuelle Themen

Administrator.de FeedbackApache ServerAppleAssemblerAudioAusbildungAuslandBackupBasicBatch & ShellBenchmarksBibliotheken & ToolkitsBlogsCloud-DiensteClusterCMSCPU, RAM, MainboardsCSSC und C++DatenbankenDatenschutzDebianDigitiales FernsehenDNSDrucker und ScannerDSL, VDSLE-BooksE-BusinessE-MailEntwicklungErkennung und -AbwehrExchange ServerFestplatten, SSD, RaidFirewallFlatratesGoogle AndroidGrafikGrafikkarten & MonitoreGroupwareHardwareHosting & HousingHTMLHumor (lol)Hyper-VIconsIDE & EditorenInformationsdiensteInstallationInstant MessagingInternetInternet DomäneniOSISDN & AnaloganschlüsseiTunesJavaJavaScriptKiXtartKVMLAN, WAN, WirelessLinuxLinux DesktopLinux NetzwerkLinux ToolsLinux UserverwaltungLizenzierungMac OS XMicrosoftMicrosoft OfficeMikroTik RouterOSMonitoringMultimediaMultimedia & ZubehörNetzwerkeNetzwerkgrundlagenNetzwerkmanagementNetzwerkprotokolleNotebook & ZubehörNovell NetwareOff TopicOpenOffice, LibreOfficeOutlook & MailPapierkorbPascal und DelphiPeripheriegerätePerlPHPPythonRechtliche FragenRedHat, CentOS, FedoraRouter & RoutingSambaSAN, NAS, DASSchriftartenSchulung & TrainingSEOServerServer-HardwareSicherheitSicherheits-ToolsSicherheitsgrundlagenSolarisSonstige SystemeSoziale NetzwerkeSpeicherkartenStudentenjobs & PraktikumSuche ProjektpartnerSuseSwitche und HubsTipps & TricksTK-Netze & GeräteUbuntuUMTS, EDGE & GPRSUtilitiesVB for ApplicationsVerschlüsselung & ZertifikateVideo & StreamingViren und TrojanerVirtualisierungVisual StudioVmwareVoice over IPWebbrowserWebentwicklungWeiterbildungWindows 7Windows 8Windows 10Windows InstallationWindows MobileWindows NetzwerkWindows ServerWindows SystemdateienWindows ToolsWindows UpdateWindows UserverwaltungWindows VistaWindows XPXenserverXMLZusammenarbeit
GELÖST

Excel Tabelle in XML importieren

Frage Entwicklung XML

Mitglied: dila21

dila21 (Level 1) - Jetzt verbinden

02.12.2014, aktualisiert 15:10 Uhr, 1612 Aufrufe, 19 Kommentare

Hallo zusammen,

ich habe Daten in einer Excel-Tabelle, das mit Attributen und Namen etc. befüllt ist.
Ich würde nun gerne wissen, ob es möglich ist, diese Daten in eine XML Datei mit einer vordefinierten
Struktur zu importieren.
Vielen Dank im voraus.

Viele Grüße

Dila
Mitglied: colinardo
02.12.2014 um 10:16 Uhr
Hallo Dila,
Zitat von dila21:
ich habe Daten in einer Excel-Tabelle, das mit Attributen und Namen etc. befüllt ist.
Ich würde nun gerne wissen, ob es möglich ist, diese Daten in eine XML Datei mit einer vordefinierten
Struktur zu importieren.
Sicher, alles ist möglich, wenn man wüsste wie deine Strukturen und dein Excel-File aussehen

Grüße Uwe
Bitte warten ..
Mitglied: dila21
02.12.2014, aktualisiert um 11:42 Uhr
Hallo Uwe,

also die Struktur der Excel-Tabelle sieht folgendermaßen aus:

sooo die Struktur in Excel sieht natürlich so aus: Spalte A Spalte B Spalte C Spalte D, die Inhalte dieser Spalten habe ich gleich drunter aufgeschrieben:

Spalte A
Sparte
Testklasse

Spalte B
Sparte ID
12

Spalte C
Attribut Name

Attribut1
Attribut2
Attribut3


Spalte D
Attribut ID
00001
00002
00003

Die Attribute 1-3 sind der Testklasse zugeordnet.

Die Struktur des XML-Files muss folgende sein:


01.
  
02.
 
03.
<ICSDictionaryAttribute attributeId="00001"> 
04.
		<Name>Attribut 1</Name> 
05.
		<Format> 
06.
			<ICSFormatString scale="8"/> 
07.
		</Format> 
08.
		<Description></Description> 
09.
		<Comment></Comment> 
10.
	</ICSDictionaryAttribute> 
11.
 
12.
<ICSDictionaryAttribute attributeId="00002"> 
13.
		<Name>Attribut 2</Name> 
14.
		<Format> 
15.
			<ICSFormatString scale="8"/> 
16.
		</Format> 
17.
		<Description></Description> 
18.
		<Comment></Comment> 
19.
	</ICSDictionaryAttribute>			 
20.
 
21.
 <ICSDictionaryAttribute attributeId="00003">		 
22.
          <Name>Attribut 3</Name>		 
23.
             <Format>			 
24.
             <ICSFormatString scale="8"/>		 
25.
          </Format>		 
26.
          <Description></Description>		 
27.
         <Comment></Comment>	 
28.
         </ICSDictionaryAttribute>				 
29.
 
30.
 
31.
 
32.
<ClassPackage classId="12"> 
33.
		<ICSClass abstract="true" unitSystem="both"> 
34.
 
35.
			<Name>Einzelteile</Name> 
36.
			<Attribute dbIndex="1" attributeId="00001"/> 
37.
			<Attribute dbIndex="2" attributeId="00002"/>						 
38.
                       <Attribute dbIndex="3" attributeId="00003"/>						 
39.
		</ICSClass> 
40.
	</ClassPackage> 
41.
 

Ich hoffe ist verständlich dargestellt.

Gruß Dila
Bitte warten ..
Mitglied: colinardo
02.12.2014, aktualisiert um 11:29 Uhr
Zitat von dila21:

Hallo Uwe,

also die Struktur der Excel-Tabelle sieht folgendermaßen aus:

A B C
D

Sparte Sparte ID Attribut Name Attribut ID

Testklasse 12
Attribut 1
00001
Attribut 2
00002
Attribut 3
00003


Ich hoffe ist verständlich dargestellt.
hmm die Formatierung des Excel-Files ist mir noch nicht klar, bitte nutze die Bitte nutze Code-Tags für deinen Quellcode: <code> Quellcode </code>. Merci.
Bitte warten ..
Mitglied: dila21
02.12.2014 um 11:43 Uhr
hallo Uwe,

habs jetzt mal aktualisiert, hoffe ist jetzt etwas klarer, konnte leider kein Screenshot einfügen . Habs nicht hinbekommen .
Bitte warten ..
Mitglied: colinardo
02.12.2014, aktualisiert um 11:53 Uhr
OK und wie sieht das bereits vorhandene XML-Dokument aus, bzw. in welchen Tag im vorhandenen XML-File muss dein Teil geschrieben werden ?
Bitte warten ..
Mitglied: dila21
02.12.2014 um 11:58 Uhr
ja da liegt das Problem, ich weiß das das so aussehen muss, was ich als Code hinzugefügt hatte. Mein Problem ist der Weg dahin. Mach ich das mit einer Batch Datei? Soo das die Inhalte meiner Excel-Tabelle in dieser XML-Struktur wie als Code angegeben, aussehen. Sorry ich glaube ich habe das nicht genau erklärt .
Bitte warten ..
Mitglied: colinardo
02.12.2014, aktualisiert um 12:07 Uhr
Zitat von dila21:

ja da liegt das Problem, ich weiß das das so aussehen muss, was ich als Code hinzugefügt hatte. Mein Problem ist der
Weg dahin. Mach ich das mit einer Batch Datei? Soo das die Inhalte meiner Excel-Tabelle in dieser XML-Struktur wie als Code
angegeben, aussehen. Sorry ich glaube ich habe das nicht genau erklärt .
Das erstellen ist kein Problem nur beantwortest du meine Frage damit nicht damit ich dir "exakt" helfen kann. Das lässt sich wie oben in den Links beschrieben mit dem XMLDocument-Objekt machen oder eben Plaintext in eine Datei schreiben.
Nur sagst du das es in ein vorhandenes XML-Dokument eingetragen werden muss, und dafür muss ich wissen in welchen Knoten du deinen obigen XML-Code eingefügt haben willst !!!

Oder ist das oben bereits alles was in die XML-Datei muss ??

Sorry aber Details sind hier sehr wichtig, sonst stimmt's hinterher nicht !

Mach ich das mit einer Batch Datei?
nein hier am besten mit VBS/VBA
Bitte warten ..
Mitglied: dila21
02.12.2014 um 12:24 Uhr
Hallo Uwe,

ja, das ist bereits alles was in die XML-Datei rein muss.
Ich habe diese vorhandene XML-Datei manuell erstellt.

Und wenn ich weiß wie sowas über ein Script funktioniert, möchte ich die weiteren Tabellen über diesen Code in eine XML-Datei umwandeln.
Die XML-Datei muss halt so aufgebaut sein zum Schluss wie mein manuell erstellter Code. Damit ich zum Schluss diese
XML-File verwenden kann.

O mann, sorry echt, ich hab das echt total falsch erklärt .

Gruß Evrim
Bitte warten ..
Mitglied: colinardo
02.12.2014, aktualisiert um 13:40 Uhr
mache dir später den Code fertig, bin gerade leider anderweitig beschäftigt
Bitte warten ..
Mitglied: dila21
02.12.2014 um 13:44 Uhr
wooooooooow vielen Dank....)
Bitte warten ..
Mitglied: colinardo
LÖSUNG 02.12.2014, aktualisiert um 15:14 Uhr
create_xml_doc_256471.xlsm

01.
Sub CreateXML() 
02.
    XMLPATH = ThisWorkbook.Path & "\xmlfile.xml" 
03.
    Set xmlDoc = CreateObject("Msxml2.DOMDocument.6.0") 
04.
    Set xmlDecl = xmlDoc.createProcessingInstruction("xml", "version=""1.0"" encoding=""utf-8""") 
05.
    xmlDoc.InsertBefore xmlDecl, xmlDoc.DocumentElement 
06.
     
07.
    Set nodeRoot = xmlDoc.createElement("root") 
08.
    xmlDoc.appendChild (nodeRoot) 
09.
     
10.
    With Sheets(1) 
11.
        For Each cell In .Range("A2", .Range("A2").End(xlDown)) 
12.
            Set nodeDicAtt = xmlDoc.createElement("ICSDictionaryAttribute") 
13.
            Set attID = xmlDoc.createAttribute("attributeId") 
14.
            attID.NodeValue = cell.Offset(0, 3).Value 
15.
            nodeDicAtt.Attributes.setNamedItem (attID) 
16.
             
17.
            Set nodeName = xmlDoc.createElement("Name") 
18.
            nodeName.Text = cell.Offset(0, 2).Value 
19.
            nodeDicAtt.appendChild (nodeName) 
20.
             
21.
            Set nodeFormat = xmlDoc.createElement("Format") 
22.
            Set nodeFormatString = xmlDoc.createElement("ICSFormatString") 
23.
            nodeFormat.appendChild (nodeFormatString) 
24.
            Set attScale = xmlDoc.createAttribute("scale") 
25.
            nodeFormatString.Attributes.setNamedItem (attScale) 
26.
            nodeDicAtt.appendChild (nodeFormat) 
27.
             
28.
            Set nodeDescription = xmlDoc.createElement("Description") 
29.
            Set nodeComment = xmlDoc.createElement("Comment") 
30.
            nodeDicAtt.appendChild (nodeDescription) 
31.
            nodeDicAtt.appendChild (nodeComment) 
32.
             
33.
            nodeRoot.appendChild (nodeDicAtt) 
34.
             
35.
            Set nodeClass = xmlDoc.SelectSingleNode("//ClassPackage[@classId='" & cell.Offset(0, 1).Value & "']") 
36.
            If nodeClass Is Nothing Then 
37.
                Set nodeClassPackage = xmlDoc.createElement("ClassPackage") 
38.
                Set attClassId = xmlDoc.createAttribute("classId") 
39.
                attClassId.NodeValue = cell.Offset(0, 1).Value 
40.
                nodeClassPackage.Attributes.setNamedItem (attClassId) 
41.
                 
42.
                Set nodeICSClass = xmlDoc.createElement("ICSClass") 
43.
                Set attAbstract = xmlDoc.createAttribute("abstract") 
44.
                Set attUnitSystem = xmlDoc.createAttribute("unitSystem") 
45.
                attAbstract.NodeValue = "true" 
46.
                attUnitSystem.NodeValue = "both" 
47.
                nodeICSClass.Attributes.setNamedItem (attAbstract) 
48.
                nodeICSClass.Attributes.setNamedItem (attUnitSystem) 
49.
                Set nodeName = xmlDoc.createElement("Name") 
50.
                nodeName.Text = "Einzelteile" 
51.
                nodeICSClass.appendChild (nodeName) 
52.
                 
53.
                nodeClassPackage.appendChild (nodeICSClass) 
54.
                nodeRoot.appendChild (nodeClassPackage) 
55.
                 
56.
                Set nodeClass = nodeClassPackage 
57.
            End If 
58.
             
59.
            Set nodeAttribute = xmlDoc.createElement("attribute") 
60.
            Set attDBIndex = xmlDoc.createAttribute("dbIndex") 
61.
            Set attID = xmlDoc.createAttribute("attributeId") 
62.
            Set lastAttribute = nodeClass.ChildNodes(0).SelectSingleNode("attribute[last()]") 
63.
            If Not lastAttribute Is Nothing Then 
64.
                attDBIndex.NodeValue = CInt(lastAttribute.Attributes.getNamedItem("dbIndex").Text) + 1 
65.
            Else 
66.
                attDBIndex.NodeValue = 1 
67.
            End If 
68.
             
69.
            attID.NodeValue = cell.Offset(0, 3).Value 
70.
            nodeAttribute.Attributes.setNamedItem (attDBIndex) 
71.
            nodeAttribute.Attributes.setNamedItem (attID) 
72.
            Set nodeICSClass = nodeClass.SelectSingleNode("ICSClass") 
73.
            nodeICSClass.appendChild (nodeAttribute) 
74.
             
75.
        Next 
76.
    End With 
77.
     
78.
     
79.
    ' Stylesheet: XML Dokument schön formatieren 
80.
    Set oXsltDoc = CreateObject("Msxml2.DOMDocument.6.0") 
81.
    oXsltDoc.async = False 
82.
    oXsltDoc.LoadXML ( _ 
83.
      "<?xml version=""1.0"" encoding=""windows-1252""?>" & vbNewLine & _ 
84.
      "<xsl:stylesheet version=""1.0"" xmlns:xsl=""http://www.w3.org/1999/XSL/Transform"">" & vbNewLine & _ 
85.
      " <xsl:output method=""xml"" version=""1.0"" encoding=""UTF-8"" indent=""yes"" />" & vbNewLine & _ 
86.
      " <xsl:template match=""node()|@*"">" & vbNewLine & _ 
87.
      "     <xsl:copy>" & vbNewLine & _ 
88.
      "         <xsl:apply-templates select=""node()|@*"" />" & vbNewLine & _ 
89.
      "     </xsl:copy>" & vbNewLine & _ 
90.
      " </xsl:template>" & vbNewLine & _ 
91.
      "</xsl:stylesheet>") 
92.
    xmlDoc.transformNodeToObject oXsltDoc, xmlDoc 
93.
    '---------------------------- 
94.
     
95.
    'XML-Dokument speichern 
96.
    xmlDoc.Save (XMLPATH) 
97.
     
98.
    'Info ausgeben 
99.
    MsgBox "Die XML-Datei wurde erzeugt und liegt hier: " & XMLPATH, vbInformation 
100.
     
101.
    Set xmlDoc = Nothing 
102.
    Set oXsltDoc = Nothing 
103.
End Sub
Viel Spaß
Grüße Uwe
Bitte warten ..
Mitglied: dila21
02.12.2014 um 15:10 Uhr
Dankeeeeeeeeeeeeeeeeeeeee
Bitte warten ..
Mitglied: dila21
04.12.2014 um 15:07 Uhr
Hallo Uwe,

hat wunderbar funktioniert. Ich habe versucht den Code etwas zu erweitern, aber habs leider nicht hinbekommen.
Was muss ich denn beachten, wenn ich möchte, das auch der Name aus der Tabelle ausgelesen wird.

Im Moment ist das ja so, dass der Name im Makro reingeschrieben werden muss.

Set nodeName = xmlDoc.createElement("Name")
nodeName.Text = ""
nodeICSClass.appendChild (nodeName)

Und ich habe versucht noch eine Spalte hinzuzufügen , leider erfolglos. Ich wollte noch Parent hinzufügen (siehe Code). Ich werde in die Excel-Tabelle noch eine Spalte Paren hinzufügen, was dann auch übernommen werden soll. Ich habe das versucht, etwas von den anderen Schritten abzuleiten, leider nicht geklappt.


01.
 
02.
<ClassPackage classId="1234"> 
03.
		<ICSClass unitSystem="both"> 
04.
			<Parent>789</Parent> 
05.
			<Name>Testklasse</Name> 
06.
			<Attribute dbIndex="90" arraySize="1" attributeId="12345"> 
07.
			<Attribute dbIndex="91" arraySize="1" attributeId="45693"> 
08.
			 
09.
		</ICSClass> 
10.
	</ClassPackage>

Viele Grüße

Dila
Bitte warten ..
Mitglied: colinardo
LÖSUNG 04.12.2014, aktualisiert 05.12.2014
Zitat von dila21:
Im Moment ist das ja so, dass der Name im Makro reingeschrieben werden muss.
Nein, muss er nicht, wie oben im Code zu sehen holt sich das Script den Wert mit dieser Zeile aus der Tabelle
nodeName.Text = cell.Offset(0, 2).Value 
cell ist dabei gerade die aktuelle Zeile. Mit Offset(0,2) wird der Zeiger dann zwei Spalten nach rechts verschoben und der Wert dieser Zelle zurückgegeben. Das musst du an deine hinzugefügte Spalte anpassen. Wenn du natürlich die Spalte zwischen die jetzigen und nicht hinten dran einfügst, musst du natürlich die anderen Offsets auf die Spalten ebenfalls ändern damit die wieder stimmen.

Für eine zusâtzliche Spalte mit Parent die du in der Tabelle hinten angefügt hast fügst du mit folgendem zusätzlichen Code ein:
01.
Set nodeParent = xmlDoc.createElement("Parent") 
02.
nodeParent.Text = cell.Offset(0,4).Value 
03.
nodeICSClass.appendChild (nodeParent)
In diesem Fall wäre der Wert für Parent also in Spalte E der jeweils aktuellen Zeile zu finden.

Du musst dir das XML Gerüst wie einen Baum vorstellen. Im Code erstellst du dazu zuerst die Elemente und Attribute, welche du dann an die jeweiligen Vorgänger-Elemente(Mutterelemente) anhängst (appendChild).

Grüße Uwe
Bitte warten ..
Mitglied: dila21
05.12.2014 um 12:44 Uhr
Danke Uwe, alles hat funktioniert
Bitte warten ..
Mitglied: dila21
17.12.2014, aktualisiert um 10:22 Uhr
Hallo Uwe,

ich hätte da noch eine kleine Frage . Ich habe da noch ein Problem, ansonsten müsste ich das ganze per Hand einfügen . Und das dauert ja übel lang.

Mein Problem:

Ich habe eine neue Excel-Tabelle, die so ausschaut:

A= Sparte | B=Nummer | C=ABC | D=DEF | E=GHI |
Testklasse | 123456 | Wert1 | Wert2 | Wert3 |





Grüße Dila
Bitte warten ..
Mitglied: colinardo
17.12.2014, aktualisiert um 09:56 Uhr
Zitat von dila21:
ich hätte da noch eine kleine Frage . Ich habe da noch ein Problem, ansonsten müsste ich das ganze per Hand einfügen . Und das dauert ja übel lang.
ja und meine Zeit ist umesöns oder was ?

Hast du vielleicht eine Idee, wie das funktionieren könnte?
Sicher ist doch immer wieder das gleiche, finde das aber ein bisschen dreist mich hier deine Arbeit machen zu lassen, sorry, habe ihn dir nun schon zwei mal ergänzt.
Obiger Code sollte dir eigentlich als Lernvorlage dienen, du gibst hier einfach zu schnell auf...

Gegen einen Obolus mach ich dir das gerne, sozusagen als Entschädigung für die Zeit die du Däumchen drehst und Kaffee schlürfst, bei Interesse PM an mich ...

Grüße Uwe
Bitte warten ..
Mitglied: dila21
17.12.2014 um 10:28 Uhr
Hallo Uwe,

sorry, das du es so aufgefasst hast. So war das selbstverständlich nicht gemeint oder gedacht von mir. Aber klar, verstehe dich auch.
Ich habe das schon selber versucht, und bekomme diese Fehlermeldung halt nicht weg. Aus diesem Grund habe ich dich gefragt.
Es ist keineswegs so, das du meine Arbeit machst, glaub mir.
PS: Ich schreibe hier auch erst rein, nachdem ich es selber länger versucht habe. Aber trotzdem vielen Dank für deine Hilfe.
Ich versuchs mal weiter.

Gruß Dila
Bitte warten ..
Neuester Wissensbeitrag
Ähnliche Inhalte
VB for Applications
Bestimmte Daten aus eine CSV-Datei in eine Excel-Tabelle importieren (2)

Frage von MariaElena zum Thema VB for Applications ...

Microsoft Office
Word Dokument (vorausgefüllte Formulare) aus Excel Tabelle generieren (1)

Frage von Server4Alle zum Thema Microsoft Office ...

VB for Applications
Excel VBA XML-Nodes auslesen (4)

Frage von chef1568 zum Thema VB for Applications ...

VB for Applications
gelöst Xml-Datei laden bzw. auf Festplatte kopieren und per VBA in eine Access-Tabelle speichern (22)

Frage von machohunk zum Thema VB for Applications ...

Heiß diskutierte Inhalte
Windows Userverwaltung
Ausgeschiedene Mitarbeiter im Unternehmen - was tun mit den AD Konten? (33)

Frage von patz223 zum Thema Windows Userverwaltung ...

LAN, WAN, Wireless
FritzBox, zwei Server, verschiedene Netze (21)

Frage von DavidGl zum Thema LAN, WAN, Wireless ...

Viren und Trojaner
Aufgepasst: Neue Ransomware Goldeneye verbreitet sich rasant (20)

Link von Penny.Cilin zum Thema Viren und Trojaner ...

Windows Netzwerk
Windows 10 RDP geht nicht (18)

Frage von Fiasko zum Thema Windows Netzwerk ...