dawson
Goto Top

Per Batch (oder Excel-Makro) XML-Dateien mit Inhalt gefüllt aus Excel-Datenbank erstellen

Hallo,
ich habe eine Excel-Datei mit einem Tabellenblatt. In jeder Zeile steht ein Datensatz mit den Spalten-Angaben "Datei-Name", "Datei-Endung", "XML-Tag" und "Inhalt".
Jetzt möchte ich via Batch-Datei (oder auch Excel-Makro ggf.) für jede Zeile dieser Datenbank eine XML-Datei anlegen (Datei-Endung sollte variabel sein, also nicht zwingend .xml) und darin als Inhalt ein paar Zeilen XML, bzw. einfacher Text.

Geht das? Welcher Ansatz?
Ich weiß nicht mal, nach was ich da googeln sollte.
Gehts mit Batch oder doch eher via Excel-Marko?

Vielen Dank schon mal.

Content-Key: 172998

Url: https://administrator.de/contentid/172998

Printed on: April 19, 2024 at 22:04 o'clock

Member: bastla
bastla Sep 12, 2011 at 21:51:06 (UTC)
Goto Top
Hallo dawson!
Gehts mit Batch oder doch eher via Excel-Marko?
Kommt drauf an, was der Marko so drauf hat ... face-wink

Für das mit
ein paar Zeilen XML
fehlt mir momentan grade die nötige Fantasie ...

Grüße
bastla
Member: rubberman
rubberman Sep 12, 2011 at 22:10:12 (UTC)
Goto Top
Hallo dawson.

XML Dateien haben sehr strenge Syntaxregeln. Irgendeine Textdatei mit Endung XML ergibt noch lange keine XML Datei. Andererseits hast du durchaus Recht, dass eine XML Datei nicht zwingend die Endung XML haben muss.
Also, mindestens sollten wir noch die Zeichcodierung wissen, sowie den Name des Root-Elements.
Per Batch kommst du im Übrigen nicht an den Inhalt einer Excel Datei, mit VBScript allerdings schon.

Grüße
rubberman
Member: dawson
dawson Sep 12, 2011 at 23:39:45 (UTC)
Goto Top
@bastla: da hat sich doch glatt ein Schreibfehler eingeschlichen. Und du hast ihn gefunden. Ganz toll gemacht!

@rubberman: Also, die "XML"-Datei hat eine Fantasie-Endung, die je Zeile individuell festgelegt ist und der Inhalt wird wie folgt aufgebaut sein (abhängig wieder von einem Zellinhalt in der Zeile):
<rootelement>
<text>Inhalt der Zeile</text>
</rootelement>
Mehr steht da nicht drin.

Gut, d.h. Batch ist nicht. Aber aus einer txt-Datei könnte ich doch via Batch auslesen. Bräuchte es ja aus der Excel-Datei nur als txt mit Semikolon abspeichern.

Gibts da gute Tuts irgendwo im Netz?
Member: bastla
bastla Sep 13, 2011 at 05:39:14 (UTC)
Goto Top
Hallo dawson!
Ganz toll gemacht!
Danke für das Kompliment face-wink ...

... das ich leider hinsichtlich der Darstellung Deines Vorhabens (vor allem im Eröffnungsposting) nicht uneingeschränkt zu erwidern vermag - und wenn es jetzt heißt:
<text>Inhalt der Zeile</text>
ist für mich noch immer nicht klar, ob dieser Text nun doch einzeilig ist oder es in der Zelle Zeilenumbrüche gibt ...

Und: Kannst Du bestätigen, dass das "rootelement" ein konstanter Wert ist?

Ansonsten kann ich mich rubberman nur anschließen: Wenn Du den Ablauf automatisieren willst, kommst Du um VB(A/S) nicht herum (und sei es nur, um die Daten in eine Textdatei zu exportieren) ...

Grüße
bastla
Member: rubberman
rubberman Sep 13, 2011 at 22:45:27 (UTC)
Goto Top
Hallo Zusammen,

ich versuche mal einen Schuss ins Blaue (vielleicht treffe ich ja zufälligerweise ins Schwarze face-wink).

*.vbs
Const strXLFile = "D:\irgendwo\test.xls"  
Const iWorksheet = 1
Const strDestDir = "D:\irgendwo"  
Const strEncoding = "UTF-8"  
Const strRootElement = "rootelement"  

Set objADOS = CreateObject("ADODB.Stream")  
objADOS.Type = 2

line = 0
Set objWB = GetObject(strXLFile)
Set objWS = objWB.Worksheets(iWorksheet)
Do While objWS.Cells(line + 1, 1).Text <> ""  
  line = line + 1
  With objADOS
    .Open
    .Charset = strEncoding
    .WriteText "<?xml version=""1.0"" encoding=""" & strEncoding & _  
      """?>" & vbCrLf & "<" & strRootElement & ">" & vbCrLf & vbTab & "<" & _  
      objWS.Cells(line, 3).Text & ">" & objWS.Cells(line, 4).Text & "</" & _  
      objWS.Cells(line, 3).Text & ">" & vbCrLf & "</" & strRootElement & ">"  
    .Position = 0
    .SaveToFile strDestDir & "\" & objWS.Cells(line, 1).Text & _  
      "." & objWS.Cells(line, 2).Text, 2  
    .Close
  End With
Loop

Set objWS = Nothing
objWB.Close
Set objWB = Nothing
Set objADOS = Nothing

Die Konstanten am Anfang des Codes anpassen und testen.

Grüße
rubberman