XML File aus Excel generieren, ein paar Probleme
07.09.2017 14:37:23
Nadine
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