Die von Excel verwendeten Trennzeichen beim Speichern als csv richten sich nach den regionalen Einstellungen in der Windows-Systemsteuerung.
Beim Einlesen der csv in einem VBS-Skript in WinCC flex RT richten sich die Konvertierfunktionen nach dem Gebietsschema des Windows, unter dem die RT läuft.
Es ist gut möglich, daß die regionalen Einstellungen nicht zueinander passen.
Deshalb würde ich nicht die automatischen Konvertierfunktionen benutzen, sondern unabhängig vom Gebietsschema in Excel eigene VBA-Makros zum Speichern
eines Bereiches als csv erstellen, wo ich die Datei-Ausgabewerte mit festgelegten Trennzeichen erzeuge. Zum Einlesen natürlich auch ein eigenes Makro,
welches die Zeilen selber in einzelne Zahlen zerlegt.
Auf der anderen Seite in WinCC flex RT muß man das "eigene" Gebietsschema-unabhängige Zerlegen selbstverständlich auch programmieren.
Beim selber-Erzeugen der csv-Datei kann man auch gut Kopfinformationen in die ersten Zeilen schreiben, z.B. Kennungen und Format-Versionsnummern,
so daß das Einlese-Script eine unbekannt formatierte csv-Datei gleich ablehnt und keinen Runtime-Error erzeugt.
Ersetzen von Dezimalpunkten durch Kommas in Strings kann man in VBS mit der
Replace-Funktion machen oder mit der
InStr-Funktion nach den Punkten
oder Kommas suchen. Oder mit der
Mid-Funktion den String zeichenweise analysieren.
Hier lauert aber noch eine weitere Falle: Woran soll das WinCC flex Script erkennen, ob Komma oder Punkt als Dezimaltrennzeichen verwendet wurden?
Eine csv-Datei von einem Excel unter deutsch eingestelltem Windows erzeugt kann Kommas als Dezimaltrennzeichen und Punkte als Zifferngruppierungs-
Zeichen (Tausender-Punkt) enthalten! Auch das Listentrennzeichen zwischen den Zahlenwerten muß nicht unbedingt das Semikolon sein!
Dazu fällt mir nur dieser Workarround ein:
die csv-Datei enthält vor den eigentlichen Zahlenwerten 2 oder mehr feste bekannte Zahlenwerte (z.B. 1234,56), die durch die csv-Exportfunktion mit
den in der Datei verwendeten Trennzeichen formatiert wurden, z.B.
Code:
"Trennzeichen-Sample";1.234,56;1.234,56;;
"Wert1";"Wert2";"Wert3";"Wert4";"Wert5"
0;123;0,45;876.543,21;0
Das Einlese-Script kann nun aus der ersten Zeile die verwendeten Trennzeichen ermitteln und auf die nachfolgenden Zahlenwerte anwenden:
die Zifferngruppierungs-Zeichen entfernen, die Dezimaltrennzeichen ggf. von Punkt zu Komma ersetzen (und wenn gewünscht die Zeile in die einzelnen
Zahlenwerte splitten).
Harald