Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1576to1580
Aktuelles Verzeichnis
Verzeichnis Index
Übersicht Verzeichnisse
Vorheriger Thread
Rückwärts Blättern
Nächster Thread
Vorwärts blättern
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

XML File aus Excel generieren, ein paar Probleme

XML File aus Excel generieren, ein paar Probleme
07.09.2017 14:37:23
Nadine
Hallo zusammen,
Ich habe ein Makro erstellt, mit dem ich aus einer Exceltabelle ein XML-File generieren will.
Das funktioniert auch schon ganz gut bis auf ein paar Kleinigkeiten..
Führende Nullen werden entfernt:
In meiner Exceltabelle gibt es eine Spalte in der eine Gruppennummer (4-stellig) steht. Das exportieren funktioniert allerdings nur dann richtig wenn die Zahl mit einer 1 beginnt also z.B. 1001 allerdings nicht bei 0000, welche die erste Gruppe ist. Hier wird ins XML-File der Wert 0 geschrieben, sowie auch bei der AlarmID, welche sich ein paar Spalten weiter befindet und ebenfalls mit Nullen beginnt.
sinnlose Leerzeichen und Anführungsstriche:
Eine der zu exportierenden Spalten enthält Meldungen, welche am Ende unnütze Leerzeichen und ein Anführungszeichen also z.B. Meldetext bla bla '.
Hier hätte ich mich an der Trim Function bedient aber die zieht irgendwie nicht, ka ob die Syntax nicht stimmt, hab aber schon
vieles ausprobiert. Achja, die Originaldatei sollte nicht verändert werden.
Ein Beispielauszug aus der Exceltabelle:
A B C(leer) D E F
1 Ortskennzahl AlarmID Freigabe Text
2 0000 0003 00000003 ENABLED control off '
3 0004 00000004 ENABLED requirement System off '
Hier mal der komplette Code, etwas kommentiert:

Sub XMLFileGenerieren()
Dim group As Integer
Dim ID As Long
Dim AlarmText As Variant
Dim ZeilenMax As Integer
Dim ZeileAktuell As Integer
Open "C:\Users\loibl_n.xxxx\Documents\AlarmConfig.xml" For Output As #1
Print #1, ""
Print #1, ""
'Zähler, wie viele Zeilen verwendet werden für Schleifenlänge
ZeilenMax = ActiveSheet.Cells(Rows.Count, 2).End(xlUp).Row
ZeileAktuell = 2 'Wert für aktuelle Zeile
With ThisWorkbook.Worksheets(ActiveSheet.Name)
For i = 1 To ZeilenMax
Dim Zeileleer As Variant
Dim ZelleGroup As Variant
Dim ZelleID As Variant
Dim ZelleAlarmText As Variant
'Prüfung ob in der Zeile ein Eintrag existiert, falls nicht wäre Spalte B leer
Zeileleer = "B" & ZeileAktuell
ZelleGroup = "A" & ZeileAktuell 'Gruppennummer steht in Spalte A(Ortskennzahl)
ZelleID = "D" & ZeileAktuell 'ID steht in Spalte D(AlarmID)
ZelleAlarmText = "F" & ZeileAktuell 'Alarmtext steht in Spalte F(Text)
If Range([Zeileleer]).Value  "" Then 'Prüft ob die Zeile leer ist
'Überprüfung der Gruppennummer auf Numerisch und 4 stellig (hier ist das Problem mit der 0)
If IsNumeric(Range([ZelleGroup]).Value) And Len(Range([ZelleGroup]).Value) = 4 Then
group = Range([ZelleGroup]).Value
End If
'Überprüfung der ID auf Numerisch und 8 stellig (hier ebenfalls das Problem)
If IsNumeric(Range([ZelleID]).Value) And Len(Range([ZelleID]).Value) = 8 Then
ID = Range([ZelleID]).Value
End If
'Hier der Teil des Alarmtextes, mithilfe der nicht auskommentierten
'Zeilen wird zumindest der Text übernommen
'allerdings würde ich hier gerne die auskommentierten Zeilen verwenden um
'eben diese Leerzeichen zu entfernen aber die funktionieren nicht
If Range([ZelleAlarmText]).Value  "" Then
AlarmText = Range([ZelleAlarmText]).Value
'AlarmText = Trim(Range([ZelleAlarmText]).Value)
'ZelleAlarmText.Value = Trim(Range([ZelleAlarmText]).Value)
AlarmText = Trim(AlarmText)
End If
'Baut die XML Abschnitte zusammen
Print #1, "    "
Print #1, "        " & ID & ""
Print #1, "        true"
Print #1, "        " & group & ""
Print #1, "        " & AlarmText & ""
Print #1, "    "
ZeileAktuell = ZeileAktuell + 1
End If
Next i
Print #1, ""
Close #1
End With
End Sub


Das Ergebnis sieht aktuell so aus:



3
true
0
control off '


4
true
0
requirement System off '


Sollte aber so aussehen:



00000003
true
0000
control off


00000004
true
0000
requirement System off


Sorry für den ganzen Text und schonmal Danke für Eure Hilfe.
Gruß Nadine

4
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: XML File aus Excel generieren, ein paar Probleme
07.09.2017 15:40:58
Michael
Hallo!
Vom ersten Drüberschauen:
Übergib die Gruppennummer nicht als Zell-Wert, sondern als Zell-Text, also statt
group = Range([ZelleGroup]).Value
so...
group = Range([ZelleGroup]).Text
Bzgl. dem letzten Leerzeichen und Anführungsstrich, kannst Du ggf. so arbeiten:
AlarmText = Mid(Range([ZelleAlarmText]).Text, 1, _
InStrRev(Range([ZelleAlarmText]).Text, " ") - 1)
LG
Michael
AW: XML File aus Excel generieren, ein paar Probleme
08.09.2017 08:00:49
Nadine
Hallo Michael,
also das mit der Gruppennummer und der AlarmID hat perfekt geklappt, danke!
Mit den Anführungszeichen habe ich nochmal was anderes zusammengebaut falls sich diese Störtexte mal ändern sollten und zum Schluss kein Leerzeichen oder Anführungszeichen steht.
Hier noch der Code zur Info, vielleicht hilfts ja noch wem:
        AlarmText = Range([ZelleAlarmText]).Text
AlarmText = Replace(AlarmText, Chr(39), "")
Das einzige was ich noch nicht hinbekommen habe ist meine Trim Funktion...
So sieht der Code aktuell dafür aus:
        AlarmText = Trim([ZelleAlarmText]).Text
Aber trimmen tut er da nicht wirklich was :(
Anzeige
AW: XML File aus Excel generieren, ein paar Probleme
08.09.2017 08:10:00
Nadine
UPDATE: habs gelöst, war ein logischer Fehler drin..
   AlarmText = Range([ZelleAlarmText]).Text
AlarmText = Replace(AlarmText, Chr(39), "")
AlarmText = Trim([ZelleAlarmText]).Text
Ich habe bei der Trim Funktion erneut auf die Zelle des Alarmtextes zugegriffen und nicht auf den bereits bearbeiteten Alarmtext in meiner Variable. Somit vermute ich konnte er nicht trimmen weil am Ende ja das Anführungszeichen war. Falls das nicht das Problem war bitte ich noch um Korrektur.
Jetzt sieht der fertige Code so aus:
        If Range([ZelleAlarmText]).Value  "" Then
AlarmText = Range([ZelleAlarmText]).Text
AlarmText = Replace(AlarmText, Chr(39), "")
AlarmText = Trim(AlarmText)
End If
In der If-Anweisung überprüfe ich nur ob in der Alarmtext Zelle auch etwas steht.
Danke trotzdem für die Hilfe!
Gruß Nadine :)
Anzeige
AW: XML File aus Excel generieren, ein paar Probleme
08.09.2017 08:16:41
Nadine
UPDATE: funktioniert jetzt, war denke ich ein logischer Fehler
AlarmText = Trim([ZelleAlarmText]).Text
In der Trim Funktion habe ich ja quasi wieder auf die Alarmtext Zelle zugegriffen und nicht auf den bereits bearbeiteten Alarmtext in meiner Variable. Ich vermute dass das Trimmen nicht funktioniert hat weil in der Zelle ja das Anführungszeichen am Ende noch da war und er somit vielleicht nicht trimmen konnte.
Der fertige Code sieht jetzt jedenfalls so aus:
        If Range([ZelleAlarmText]).Value  "" Then
AlarmText = Range([ZelleAlarmText]).Text
AlarmText = Replace(AlarmText, Chr(39), "")
AlarmText = Trim(AlarmText)
End If
In der If-Anweisung prüfe ich nur ob sich in der Alarmtext Zelle auch ein Wert befindet.
Danke trotzdem für die Hilfe!
Gruß Nadine
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige