Zuviel Werbung? - > Hier kostenlos beim SPS-Forum registrieren

Seite 1 von 3 123 LetzteLetzte
Ergebnis 1 bis 10 von 24

Thema: Auswertung CSV in Excel

  1. #1
    Registriert seit
    10.08.2010
    Beiträge
    770
    Danke
    1
    Erhielt 14 Danke für 13 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Hallo
    ich schreibe mit Wicc Flexible Energiewerte in verschiednen CSV Dateien.
    Dies Importiere ich beim Start einer Exel Tabelle in einselne Tabellen.

    Der Pfad von dem ich die CSV Daten erhalte habe ich in einem Macro hinterlegt. Ich möchte aber den Pfad in einer Excel "Einstellungen" Tabelle ablegen und diesen ggf zu ändern.
    Leider bin ich in VB Anfänger und komme hier nicht weiter. Ich Poste mal mein Macro.
    Code:
    Private Sub Workbook_Open()
    
    Dim Dummy() As String
    
    
     
    'zuerst die Datei "Stromo.csv" einlesen.
    Datei = FreeFile
    Open "C:\Energieverbrauch_Haus\Strom0.csv" For Input As #Datei
    zeile = 2
    
    Do
        Line Input #Datei, ReadLine
        If ReadLine <> "" Then
            Dummy() = Split(ReadLine, ";")
         '   Cells(zeile, 1) = Dummy(0)
           Tabelle1.Cells(zeile, 2) = Dummy(1)
           Tabelle1.Cells(zeile, 3) = Dummy(2)
          '  Cells(zeile, 4) = Dummy(3)
           ' Cells(zeile, 5) = Dummy(4)
            
            zeile = zeile + 1
        End If
    Loop Until EOF(Datei)
     
    Close
    
    
     
    'dann die Datei "Heizung0.csv" einlesen.
    Datei = FreeFile
    Open "C:\Energieverbrauch_Haus\Heizung0.csv" For Input As #Datei
    zeile = 2
    Do
        Line Input #Datei, ReadLine
        If ReadLine <> "" Then
            Dummy() = Split(ReadLine, ";")
         '   Cells(zeile, 1) = Dummy(0)
            Tabelle2.Cells(zeile, 2) = Dummy(1)
            Tabelle2.Cells(zeile, 3) = Dummy(2)
          '  Cells(zeile, 4) = Dummy(3)
           ' Cells(zeile, 5) = Dummy(4)
            
            zeile = zeile + 1
        End If
    Loop Until EOF(Datei)
     
    Close
    
    
     
    'dann die Datei "Wasser.csv" einlesen.
    Datei = FreeFile
    Open "C:\Energieverbrauch_Haus\Wasser0.csv" For Input As #Datei
    zeile = 2
    Do
        Line Input #Datei, ReadLine
        If ReadLine <> "" Then
            Dummy() = Split(ReadLine, ";")
         '   Cells(zeile, 1) = Dummy(0)
            Tabelle3.Cells(zeile, 2) = Dummy(1)
            Tabelle3.Cells(zeile, 3) = Dummy(2)
          '  Cells(zeile, 4) = Dummy(3)
           ' Cells(zeile, 5) = Dummy(4)
            
            zeile = zeile + 1
        End If
    Loop Until EOF(Datei)
     
    Close
    
    
    
    
    End Sub
    Angehängte Grafiken Angehängte Grafiken
    Zitieren Zitieren Auswertung CSV in Excel  

  2. #2
    Registriert seit
    22.06.2009
    Ort
    Sassnitz
    Beiträge
    11.163
    Danke
    921
    Erhielt 3.286 Danke für 2.655 Beiträge

    Standard

    Man kann Zellen genauso auslesen wie beschreiben.
    Wenn Du auf dem Tabellenblatt "Einstellungen" in der Zelle B1 den Dateiname stehen hast, dann kannst Du den Zelleninhalt (den Dateiname) so auslesen:

    csvDatei = Worksheets("Einstellungen").Cells(1, 2)
    oder
    csvDatei = Worksheets("Einstellungen").Range("B1")

    csvDatei enthält danach den Dateiname aus B1, z.B. "C:\Energieverbrauch_Haus\Strom0.csv"

    Man kann auch der Zelle einen Name geben, dann können später Spalten oder Zeilen davor eingefügt oder gelöscht werden, wodurch sich die Zelle verschiebt, doch der Code funktioniert trotzdem, z.B. Zelle B1 hat den Name "Settings_Dateiname_Strom":

    csvDatei = Worksheets("Einstellungen").Range("Settings_Dateiname_Strom")

    Auf Deinen Code angewandt:
    Code:
    Dim Dummy() As String, csvDatei
    
    'zuerst die Datei "Stromo.csv" einlesen.
    Datei = FreeFile
    csvDatei = Worksheets("Einstellungen").Range("B1")
    Open csvDatei For Input As #Datei   'öffnet "C:\Energieverbrauch_Haus\Strom0.csv"
    Harald
    Es ist immer wieder überraschend, wie etwas plötzlich funktioniert, sobald man alles richtig macht.

    FAQ: Linkliste SIMATIC-Kommunikation über Ethernet

  3. #3
    Registriert seit
    10.08.2010
    Beiträge
    770
    Danke
    1
    Erhielt 14 Danke für 13 Beiträge

    Standard

    Vielen Dank Harald,
    ich werde es gleich mal versuchen.
    Mit VB habe ich mich noch nicht so beschäftigt.

    Ich müsste noch beim einlesen der CVS nach Leerzeichen suchen . Jetzt suche ich ja nur nach ";".

    Ich möchte nämlich das Datum und die Uhrzeit in einselnen Zellen haben.



    Wenn du mal Zeit hast kannst du mal den Code erklären ?

    Code:
    Datei = FreeFile           ?????
    Open "C:\Energieverbrauch_Haus\Strom0.csv" For Input As #Datei
    zeile = 2
    
    Do
        Line Input #Datei, ReadLine      ????
        If ReadLine <> "" Then
            Dummy() = Split(ReadLine, ";")     ?????
         '   Cells(zeile, 1) = Dummy(0)
           Tabelle1.Cells(zeile, 2) = Dummy(1)
           Tabelle1.Cells(zeile, 3) = Dummy(2)
          '  Cells(zeile, 4) = Dummy(3)
           ' Cells(zeile, 5) = Dummy(4)
            
            zeile = zeile + 1
        End If
    Loop Until EOF(Datei)   ????
     
    Close
    Geändert von emilio20 (17.05.2014 um 20:38 Uhr)

  4. #4
    Registriert seit
    10.08.2010
    Beiträge
    770
    Danke
    1
    Erhielt 14 Danke für 13 Beiträge

    Standard

    Hallo Harald,
    es geht irgentwie nicht. Es kommt der Fehler Laufzeitfehler Datenname oder nummer falsch

    Ich habe mal die Ganzen Dateien angehängt

    Code:
    Sub CSVLaden()
    
    
    Dim Dummy() As String, csvDatei
    
     
    'zuerst die Datei "Stromo.csv" einlesen.
    Datei = FreeFile
    csvDatei = Worksheets("Einstellungen").Range("Settings_Dateiname_Strom")
    Open csvDatei For Input As #Datei   'öffnet "C:\Energieverbrauch_Haus\Strom0.csv"
    zeile = 2
    
    Do
        Line Input #Datei, ReadLine
        If ReadLine <> "" Then
            Dummy() = Split(ReadLine, ";")
            
         '   Cells(zeile, 1) = Dummy(0)
           Tabelle1.Cells(zeile, 2) = Dummy(0)
           Tabelle1.Cells(zeile, 3) = Dummy(0)
          '  Cells(zeile, 4) = Dummy(3)
           ' Cells(zeile, 5) = Dummy(4)
            
            zeile = zeile + 1
        End If
    Loop Until EOF(Datei)
     
    Close
    
    
     
    'dann die Datei "Heizung0.csv" einlesen.
    Datei = FreeFile
    csvDatei = Worksheets("Einstellungen").Range("Settings_Dateiname_Heizung")
    Open csvDatei For Input As #Datei   'öffnet "C:\Energieverbrauch_Haus\Heizung0.csv"
    zeile = 2
    Do
        Line Input #Datei, ReadLine
        If ReadLine <> "" Then
            Dummy() = Split(ReadLine, ";")
         '   Cells(zeile, 1) = Dummy(0)
            Tabelle2.Cells(zeile, 2) = Dummy(1)
            Tabelle2.Cells(zeile, 3) = Dummy(2)
          '  Cells(zeile, 4) = Dummy(3)
           ' Cells(zeile, 5) = Dummy(4)
            
            zeile = zeile + 1
        End If
    Loop Until EOF(Datei)
     
    Close
    
    
     
    'dann die Datei "Wasser.csv" einlesen.
    Datei = FreeFile
    csvDatei = Worksheets("Einstellungen").Range("Settings_Dateiname_Wasser")
    Open csvDatei For Input As #Datei   'öffnet "C:\Energieverbrauch_Haus\Wasser0.csv"
    zeile = 2
    Do
        Line Input #Datei, ReadLine
        If ReadLine <> "" Then
            Dummy() = Split(ReadLine, ";")
         '   Cells(zeile, 1) = Dummy(0)
            Tabelle3.Cells(zeile, 2) = Dummy(1)
            Tabelle3.Cells(zeile, 3) = Dummy(2)
          '  Cells(zeile, 4) = Dummy(3)
           ' Cells(zeile, 5) = Dummy(4)
            
            zeile = zeile + 1
        End If
    Loop Until EOF(Datei)
     
    Close
    
    
    
    
    End Sub
    Angehängte Grafiken Angehängte Grafiken
    Angehängte Dateien Angehängte Dateien
    Geändert von emilio20 (17.05.2014 um 21:48 Uhr)

  5. #5
    Registriert seit
    22.06.2009
    Ort
    Sassnitz
    Beiträge
    11.163
    Danke
    921
    Erhielt 3.286 Danke für 2.655 Beiträge

    Standard

    Lasse die doppelten Hochkomma " (Anführungszeichen) vor und hinter dem Dateiname in den Zellen C3, C4, C5 im Blatt "Einstellungen" weg.

    Außerdem empfiehlt es sich, diese Zellen als "Text" zu formatieren (Formatzeichen: @) oder schreibe ein einzelnes Hochkomma ' davor, damit Excel auf keinen Fall irgendwas automatisch kaputtformatiert. (das Hochkomma ' auf der #-Taste benutzen)

    Also so:
    Code:
    Falsch:
    "C:\Energieverbrauch_Haus\Strom0.csv"
    
    Richtig:
    C:\Energieverbrauch_Haus\Strom0.csv
    oder
    'C:\Energieverbrauch_Haus\Strom0.csv
    PS: wenn das Makro angehalten ist (bei Einzelschritt oder vom Debugger bei Runtime-Error), dann kannst Du den Mauszeiger auf Variablennamen in dem VBA-Code halten und es wird in einem Tooltip der Wert der Variable angezeigt.

    Harald
    Geändert von PN/DP (18.05.2014 um 21:10 Uhr) Grund: PS
    Es ist immer wieder überraschend, wie etwas plötzlich funktioniert, sobald man alles richtig macht.

    FAQ: Linkliste SIMATIC-Kommunikation über Ethernet

  6. #6
    Registriert seit
    22.06.2009
    Ort
    Sassnitz
    Beiträge
    11.163
    Danke
    921
    Erhielt 3.286 Danke für 2.655 Beiträge

    Standard

    Bilder und Programmcode sagen mehr als tausend Worte. Deshalb hier mal ein komplettes funktionierendes Beispiel für einen csv-Import in Excel.

    Ich mußte mal ein nicht gut funktionierendes Regelprogramm einer S7 untersuchen. Dazu habe ich die S7 jede Sekunde Daten in DB aufzeichnen lassen (als Ringpuffer), dann diese Daten mit einem Excel-Makro in csv-Dateien exportiert und ein kleines Anzeigediagramm inkl. Import der csv-Dateien in Excel erstellt.

    Die csv-Datei hat 3 Kopfzeilen (beginnend mit #):
    1) # eine allgemeine Überschrift/Beschreibung/Kommentar
    2) # Zeitstempel des letzten Datensatzes (letzte Datenzeile), die Zeitstempel der anderen Datensätze werden daraus berechnet
    3) # die Feldnamen für die Kurvenlegende und Spaltenüberschriften
    Dann folgen die Datenzeilen. Bis zu 7200 Datenzeilen mit bis zu 11 Werten je Zeile wertet das Diagramm aus. Mehr Werte werden von der ImportCSV-Funktion zwar eingelesen, aber nicht im Diagramm angezeigt.

    Erlaubter Aufbau der csv-Datei:
    Code:
    # Testdatensätze für Debuggen csv-Import
    # zuletzt geschriebener Datensatz: 10 DT#14-5-18-17:25:20.000
    # Wert_1;Wert_2;Wert_3;Wert_4;Wert_5; Wert_6; Wert_7; Wert_8; Wert_9 ; Wert_10 ; Wert_11
    
     1;68;0;72;2;0;5,4;1;5,7
     2; 67; 0; 72; 1; 0; 5,4; 1; 5,7
     3 ; 67 ; 0 ; 72 ; 1 ; 0 ; 5,5 ; 1 ; 5,7 ;
     4;68;0;71;1;0;5,5;1;5,9
     5; 67;; 71 ;;;    5,5   ; 1; 5,9 ;0
    
    #
    #
    06;67;0;71;0;0;5,5;1;5,9;
    06;67;0;71;0;0;5,5;1;6,0
    
     6;67;0;71;0;0;5,5;1;6,1;
    
     9;67;0;71;0;0;5,5;1;6,7;2;64
    10;67;0;71;0;0;5,5;1
    Der Excel-VBA-Code zum Import der csv-Datei hier mal gekürzt.
    Die komplette Fassung mit mehr Kommentaren siehe im Anhang die Excel-Datei Diagramm.xls oder die CSV_Import.xls.vba.txt
    Code:
    '*******************************************************************************
    'CSV-Datei in Excel-Arbeitsblatt importieren
    '30.06.2007 Harald
    'für max 7200 Datenzeilen mit max 11 Werten je Zeile
    '*******************************************************************************
    
    Dim useLastPath As Integer 'Modulweite static Variable für Erkennung Erstaufruf Dateiauswahl
    
    Public Sub ImportCSV()
    Const sep = ";" 'CSV-Separator
    
    '**** Debug-Help **** !!! Excel-Status wiederherstellen, falls Macro vorher abgebrochen
    Application.Calculation = xlCalculationAutomatic '-4105
    Application.ScreenUpdating = True
    Application.StatusBar = False
    
    '**** Datei-Pfad voreinstellen bei erstem Datei auswählen ****
    'bei Erstaufruf: Pfad auf das selbe Verzeichnis wie die Diagramm.xls einstellen
    'weil Standard-Pfad bei Erstaufruf: Pfad zu "Eigene Dateien" - hier nicht gewollt
    
    If useLastPath = 0 Then
      ChDrive Left(ActiveWorkbook.Path, 1)
      ChDir ActiveWorkbook.Path
    End If
    
    '**** Auswahl Dateiname (DateiÖffnen-Dialog)
    Do
      fileToOpen = Application.GetOpenFilename( _
        "CSV-Datei (*.txt), *.txt,CSV-Datei (*.csv), *.csv")
      If fileToOpen = False Then Exit Sub
      wahl = 0
      If Dir(fileToOpen) = "" Then
        wahl = MsgBox(fileToOpen & " existiert nicht.", _
          vbOKCancel, "Datei nicht gefunden")
        If wahl = vbCancel Then Exit Sub
      End If
    Loop Until wahl = 0
    
    'beim nächsten DateiÖffnen-Dialog mit Pfad der eben geöffneten Datei beginnen
    useLastPath = 1
    
    'Name der gewählten Datei in Tabellenblatt Worksheets("Daten").Range("L2") eintragen
    Range("FileName").Value = Mid(fileToOpen, 1 + InStrRev(fileToOpen, Application.PathSeparator))
    
    '**** Eingabe-Datei öffnen
    Open fileToOpen For Input As #1
    
    '**** Excel-Zellenneuberechnungen und -Anzeigen während Einlesen abschalten
    Application.Calculation = xlCalculationManual '-4135 'Zellen-Neuberechnung anhalten !!!
    Application.ScreenUpdating = False
    '**** und dafür Einlesefortschritt in Excel-Statusleiste anzeigen
    oldStatusBar = Application.DisplayStatusBar
    Application.DisplayStatusBar = True
    Application.StatusBar = "Daten werden importiert ..."
    
    '**** Kopfzeilen und Datensätze aus CSV-Datei lesen in Tabellenblatt "Daten" ab Zelle "C7"
    Set Blatt = Worksheets("Daten")
    With Blatt
      FirstCol = .Range("Data").Column '3 "C" = 1. Datenspalte
      FirstRow = .Range("Data").Row    '7     = 1. Datenzeile
      
      z = 0 'Datensatz-Zähler
      k = 3 'Anzahl Kopfzeilen
    
      Do While Not EOF(1)    ' Schleife bis Dateiende.
        Line Input #1, datensatz    'eine Zeile einlesen
        
        'leere Zeilen überspringen
        If datensatz = "" Then
          'nichts tun, nächste Zeile aus Datei lesen (VBA Do...Loop kennt kein Continue)
    
        '# Kommentarzeile
        ElseIf Asc(datensatz) = 35 Then 'Zeile beginnt mit #
          datenfeld = Split(Mid(datensatz, 2), sep)
          Select Case k
          Case 3 ' ...
            k = 2
          Case 2 ' ...
            k = 1
          Case 1 'Feldnamen einlesen nach C6...: # Wert_1; Wert_2; Wert_3; ...
            If UBound(datenfeld) > 3 Then 'mind. 3 ';' enthalten
              C = FirstCol 'erste Datenspalte
              For Each i In datenfeld
                .Cells(FirstRow - 1, C).Value = Trim(i) 'Feldnamen
                C = C + 1 'nächste Datenspalte
              Next
              k = 0 'OK, Feldnamen gelesen -> nicht nochmal
            End If
          End Select 'k war schon 0 -> Zeile ignorieren
        
        'Datenzeile -> C7, D7, E7, ... M7
        Else 'Datensatz! 11 Werte -> Cz...Mz
          C = FirstCol      'erste Datenspalte
          r = FirstRow + z  'Datenzeile
          datenfeld = Split(datensatz, sep)
          For Each i In datenfeld
            .Cells(r, C).Value = CDec("0" & Trim(i)) 'Zahlenwerte vom Datensatz
            C = C + 1  'nächste Spalte
          Next
          z = z + 1  'nächste Zeile & Zähler Datensätze
        End If     'Unterscheidung Leerzeile, Kommentar oder Datenzeile
        
        'Einlesefortschritt in Excel-Statuszeile anzeigen (Update nur jede zehnte Zeile)
        If (z Mod 10) = 0 Then Application.StatusBar = "Daten werden importiert ... " & z
      Loop       'nächste Zeile aus Datei
      
      'Tabelle bis Datensatz 7200 löschen, falls weniger eingelesen
      If z < 7200 Then
        .Range(.Cells(FirstRow + z, FirstCol), .Cells(FirstRow + 7199, FirstCol + 10)).ClearContents
      End If
    End With   'Blatt = Worksheets("Daten")
    
    '**** fertig importiert - Datei schließen
    Close #1
    
    '**** Excel-Einstellungen wiederherstellen
    Application.Calculation = xlCalculationAutomatic '-4105
    Application.ScreenUpdating = True
    Application.StatusBar = False
    Application.DisplayStatusBar = oldStatusBar
    
    '**** Fertigmeldung
    MsgBox z & " Datensätze eingelesen!", , "Import beendet"
    
    End Sub
    Achtung:
    Die Excel-Arbeitsblätter haben keinen Blattschutz. Bitte nur im oberen Teil des Blattes "Analyse" mit den Schaltflächen bedienen, es kann auch die Anzeigestart-Minute für das Diagramm direkt in die gelbe Zelle "J2" eingegeben werden.
    Die originale Datei Diagramm.xls ist bei mir schreibgeschützt. Nach dem csv-Import sollte die Excel-Datei besser nicht gespeichert werden, dann würde sie nämlich etliche MB groß werden.

    Harald
    Angehängte Grafiken Angehängte Grafiken
    Angehängte Dateien Angehängte Dateien
    Es ist immer wieder überraschend, wie etwas plötzlich funktioniert, sobald man alles richtig macht.

    FAQ: Linkliste SIMATIC-Kommunikation über Ethernet
    Zitieren Zitieren Beispiel: csv-Datei in Excel einlesen  

  7. #7
    Registriert seit
    10.08.2010
    Beiträge
    770
    Danke
    1
    Erhielt 14 Danke für 13 Beiträge

    Standard

    Hallo Harald,
    Super hat geklappt.
    Vielen Dank.

    Dein Programm werde ich mir mal genauer anschauen , da werde ich siche sehr viel dazu lernen.
    Eine sache noch, da finde ich nichts im Netz. Wie kann ich zu
    Code:
    Split(ReadLine, ";")
    noch den Split von Leerzeichen hinzufügen ?

  8. #8
    Registriert seit
    22.06.2009
    Ort
    Sassnitz
    Beiträge
    11.163
    Danke
    921
    Erhielt 3.286 Danke für 2.655 Beiträge

    Standard

    Wenn Du tatsächlich bei Leerzeichen splitten willst, dann benutze
    Code:
    Split(ReadLine, " ")
    
    'oder ganz allgemein:
    stringfeld = Split(string, separatorzeichen)
    Split zerlegt einen String in mehrere Teilstrings, es "zerschneidet" den String bei jedem gefundenen Separatorzeichen, wobei das Separatorzeichen selber entfernt wird.
    Code:
    Split("12 34  5,6 78 abc .. 9,0", " ") ergibt die 8 Teilstrings: "12" + "34" + "" + "5,6" + "7,8" + "abc" + ".." + "9,0"
    Oder willst Du eigentlich nur die Leerzeichen vor/hinter Zeichenfolgen entfernen? Dafür nimmt man Trim (oder auch LTrim oder RTrim).
    Code:
    Trim(" 12 34 56 ") ergibt "12 34 56".
    Schau mal in mein VBA-Beispiel und in die Excel-VBA-Hilfe: den Kursor in den unklaren Befehl setzen und F1 drücken.

    Harald
    Es ist immer wieder überraschend, wie etwas plötzlich funktioniert, sobald man alles richtig macht.

    FAQ: Linkliste SIMATIC-Kommunikation über Ethernet

  9. #9
    Registriert seit
    10.08.2010
    Beiträge
    770
    Danke
    1
    Erhielt 14 Danke für 13 Beiträge

    Standard

    Hallo Harald,

    Ich wollte nach ; und nch Leerzeichen Spliten damit ich das Datum und die Uhrzeit in einselne Spalten habe für eine weitere Verarbeitung.
    Code:
    Do
        Line Input #Datei, ReadLine
        If ReadLine <> "" Then
            Dummy() = Split(ReadLine, ";")
            'Datum Uhrzeit zerlegen
            Dummy1() = Split(Dummy(1), " ")
         ' Datum in Zelle schreiben
           Tabelle1.Cells(zeile, 2) = Dummy1()
           ' Value in Zelle schreiben
           Tabelle1.Cells(zeile, 4) = Dummy(2)
    Ich habe da noch ein ganz anderes Problem das CSV Datum hat ein anders Format als Excel Datum. Ich möchte ja aus den CSV Daten Monat verbräche von Jan .Feb usw. herausfiltern.

    Was mir aufgefallen ist wenn ich die Original CVS Datei im Excel öffne ist das Format schon angepasst. Ich kann also ein Excel Datum mit dem CSV Vergleichen.
    Wenn ich die Daten Importier ist dies nicht der Fall. Hier muss ich erst noch eine Lösung finden dies zu Konvertieren.
    Geändert von emilio20 (19.05.2014 um 00:27 Uhr)

  10. #10
    Registriert seit
    22.06.2009
    Ort
    Sassnitz
    Beiträge
    11.163
    Danke
    921
    Erhielt 3.286 Danke für 2.655 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Konvertieren von Datum/Uhrzeit ist nicht einfach weil das Format je nach Regionaleinstellungen des Windows verschieden ist.
    Deswegen bastelt man sich da besser selber was oder nutzt die VBA-Funktion DatePart

    In dem csv-Archiv ist der Zeitstempel aber auch formatunabhängig als numerischer Wert in der letzten Spalte "Time_ms" enthalten
    - zunächst Time_ms / 1.000.000 teilen, ergibt z.B. 41774,944663 = 15.05.2014 22:40:19
    - der ganzzahlige Teil vor dem Komma ist das Datum: die Anzahl Tage seit dem 31.12.1899
    - der gebrochene Teil nach dem Komma ist die Uhrzeit: 0,0 ... 1,0 entspricht 0:00:00 ... 24:00:00

    Code:
    Dim Dummy(), DT(), TimeS, Datum
    
      Line Input #Datei, ReadLine
      'ergibt z.B.: "DB 103 Stomverbrauch.Aktuell_Watt_KW_H;15.05.2014 22:40;644;1;41774944663"
    
      If ReadLine <> "" Then         'Leere Zeilen nicht auswerten
        If Asc(ReadLine) <> 36 Then  'Zeilen mit $ am Anfang nicht auswerten
          Dummy = Split(ReadLine, ";")
          ' das ergibt: 
          ' Dummy(0): "DB 103 Stomverbrauch.Aktuell_Watt_KW_H"  'VarName
          ' Dummy(1): "15.05.2014 22:40"                        'TimeString
          ' Dummy(2): "644"                                     'VarValue
          ' Dummy(3): "1"                                       'Validity
          ' Dummy(4): "41774944663"                             'Time_ms
    
          'TimeString in Datum und Uhrzeit zerlegen
          DT = Split(Dummy(1) & " ", " ")
          'das ergibt:
          ' DT(0): "15.05.2014"
          ' DT(1): "22:40"
          ' DT(2): ""
          Tabelle1.Cells(zeile, 3) = DT(0) 'Datum
          Tabelle1.Cells(zeile, 4) = DT(1) 'Uhrzeit
    
          'ODER unabhängig von den Regionaleinstellungen Time_ms in Datum und Uhrzeit zerlegen:
          TimeS = Val(Dummy(4)) / 1000000           'Time_ms / 1.000.000
          Datum = Int(TimeS)                        'Datum ist der Teil vor dem Komma, Uhrzeit der Teil nach dem Komma
          Tabelle1.Cells(zeile, 5) = Datum          'Datum   -> Zelle als Datum formatieren
          Tabelle1.Cells(zeile, 6) = TimeS - Datum  'Uhrzeit -> Zelle als Uhrzeit formatieren
    Harald
    Es ist immer wieder überraschend, wie etwas plötzlich funktioniert, sobald man alles richtig macht.

    FAQ: Linkliste SIMATIC-Kommunikation über Ethernet

Ähnliche Themen

  1. csv-datei und excel
    Von repök im Forum Programmierstrategien
    Antworten: 10
    Letzter Beitrag: 27.02.2014, 20:33
  2. Antworten: 1
    Letzter Beitrag: 02.10.2009, 11:27
  3. Antworten: 1
    Letzter Beitrag: 02.03.2009, 13:04
  4. Antworten: 6
    Letzter Beitrag: 03.10.2008, 17:49
  5. Antworten: 5
    Letzter Beitrag: 17.01.2008, 14:23

Lesezeichen

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •