TIA VB Script .csv Export Dezimal-Trennzeichen ändern

Invisible

Level-2
Beiträge
96
Reaktionspunkte
2
Zuviel Werbung?
-> Hier kostenlos registrieren
Guten Morgen,

ich habe einen Prüfstand, der mir verschiedene Messwerte in ein Array speichert.

Über die VB Scriptfunktion der HMI, lasse ich mir die Werte aus dem Array in eine csv. Datei speichern.

Die .csv Datei wird nach dem generieren über eine vba Funktion in Excel eingelesen und konvertiert.
Excel erkennt allerdings als Listentrennzeichen nur "," und nicht ";". Das war kein Problem, konnte ja einfach abgeändert werden.

Code:
For i = 1 To 1000
 Row.WriteLine(SmartTags("DB_Pruefstand_Seildurchmesser_Sensor1")(i) & "," & SmartTags("DB_Pruefstand_Seildurchmesser_Sensor2")(i) & "," & SmartTags("DB_Pruefstand_Auszugslaenge_AFM60A")(i) & ",")   
Next

1669876300560.png

Mein Problem ist nun allerdings das ich in dem Array viele Werte speicher wie z.B. "0,7856". Excel macht nach dem einlesen dann 0 & 7856 daraus.
Die Lösung mit der Regionsänderung um das in Excel zu umgehen kommt nicht in Frage.


Kann ich das Dezimaltrennzeichen irgendwie von "," auf "." ändern?

der Export der .csv sieht aktuell so aus:

SeildurchmesserSensor1 ; SeildurchmesserSensor2 ; Auszugslaenge
0,965,0,93206,

Das "," muss irgendwie zum "." werden.

Danke vorab :D
 
Die Lösung mit der Regionsänderung um das in Excel zu umgehen kommt nicht in Frage.

Kann ich das Dezimaltrennzeichen irgendwie von "," auf "." ändern?
Beim automatischen Öffnen von csv-Dateien verwendet Excel die Dezimaltrennzeichen wie in den Windows Regionaleinstellungen eingestellt. Wenn Du die Regionaleinstellungen nichtmal temporär ändern darfst, dann kannst Du die csv-Daten importieren mit dem Textkonvertier-Assistent von Excel, über: Daten > Externe Daten abrufen > Aus Text. Da kannst Du dann für den Konvertiervorgang alle Trennzeichen explizit einstellen.

Alternativ über die Zwischenablage:
1) die csv-Datei mit einem einfachen Texteditor öffnen, z.B. Notepad. Im Windows Explorer
- Rechtsmausklick auf die csv-Datei > Bearbeiten
- oder: Senden an > Notepad
- oder: Öffnen mit...
- oder: erst den Editor öffnen und da Datei öffnen
- oder ...
2) im Editor "Alles markieren" (üblicherweise Strg+A) und dann "Kopieren" (Strg+C)
3) in Excel wechseln in ein leeres Tabellenblatt
4) selektiere die Zelle A1
5) klicke auf den kleinen Pfeil unter "Einfügen" und wähle "Textkonvertierungs-Assistenten verwenden"


Alternativ könntest Du die csv-Datei mit einem eigenen VBA Makro einlesen. (Vielleicht läßt sich der Konvertiervorgang des Assistenten als Makro aufzeichnen?)

Welche Excel Version hast Du? In neueren Versionen gibt es den "Power Query-Editor".


Excel erkennt allerdings als Listentrennzeichen nur "," und nicht ";". Das war kein Problem, konnte ja einfach abgeändert werden.

Code:
For i = 1 To 1000
 Row.WriteLine(SmartTags("DB_Pruefstand_Seildurchmesser_Sensor1")(i) & "," & SmartTags("DB_Pruefstand_Seildurchmesser_Sensor2")(i) & "," & SmartTags("DB_Pruefstand_Auszugslaenge_AFM60A")(i) & ",")
Next
Ich würde als Listentrennzeichen das Semikolon ";" beibehalten und nicht zu Komma "," ändern. Womöglich ändert jemand in dem HMI die Regionaleinstellungen zu deutschen Standards mit Komma als Dezimaltrennzeichen und dann kommt das mit dem fest programmierten Listentrennzeichen Komma in Konflikt.

Harald
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo Harald,

erstmal danke für deine Antwort.

Edit:
Genutzt wird Microsoft 365.
Das Listentrennzeichen im VB-Script hab ich mittlerweile um auf Nummer sicher zu gehen wieder auf ";" geändert.

Das einlesen der .csv funktioniert über eine Makro.
In der Excel-File, gibt es einen Button, nachdem dieser betätigt wird, öffnet sich das Auswahlfenster des Explorers und ich kann die zu importierende .csv Datei auswählen.
Diese konvertierte Datei wird dann in einem neuen Tabellenblatt abgelegt.


Der dazugehörige vba code sieht so aus:

Code:
Sub ImportData()
    Dim xFileName As Variant
    Dim rg As Range
    Dim xAddress As String
    
    xFileName = Application.GetOpenFilename(, , , False, False)
       
    If xFileName = False Then Exit Sub
   
    On Error Resume Next
    Set rg = ThisWorkbook.Worksheets("Messdaten").Range("A1:A2000")
   
    On Error GoTo 0
    If rg Is Nothing Then Exit Sub
   
    xAddress = rg.Address
    With Sheets("Messdaten")
        With .QueryTables.Add("TEXT;" & xFileName, .Range(xAddress))
        .FieldNames = True 'True Lese und Schreibzugriff
        .RowNumbers = False
        .FillAdjacentFormulas = False
        .PreserveFormatting = True
        .RefreshOnFileOpen = False
        .RefreshStyle = xlInsertDeleteCells
        .SavePassword = False
        .SaveData = True
        .RefreshPeriod = 0
        .TextFilePromptOnRefresh = False
        .TextFilePlatform = 65001
        .TextFileStartRow = 1
        .TextFileParseType = xlDelimited
        .TextFileTextQualifier = xlTextQualifierDoubleQuote
        .TextFileConsecutiveDelimiter = False
        .TextFileTabDelimiter = True
        .TextFileSemicolonDelimiter = True
        .TextFileCommaDelimiter = True
        .TextFileSpaceDelimiter = False
        .TextFileTrailingMinusNumbers = False
        .Refresh BackgroundQuery = False
        End With
    End With
End Sub

csv. Import über das Makro: (Sowohl das "," als auch ";" werden als Listentrennzeichen erkannt)

1669881774517.png

Wenn ich die Daten über Excel selber einlese (Daten-->Aus Text/CSV) Nur das "," wird als Listentrennzeichen erkannt

1669881876202.png


Die Option mit der Zwischenablage fällt leider raus, da die Auswertung der Dateien so simpel wie möglich sein soll, will ich die Funktion wenn möglich nur über diesen einen Button laufen lassen.

Ich schätze man muss in dem vba Code noch irgendwas ändern, nur die Frage was....
Kennt sich da jemand aus oder sollte ich mich da besser an ein anderes Forum wenden ?
 
Zurück
Oben