andreasp85
Goto Top

Exel 2013 Datenauswertung

Guten Tag, ich bin neu hier und auf der Suche nach Antworten.

Was meine Person angeht bin ich in vielen Bereichen in meiner Firma Aktiv und mach so ziemlich alles was sonst nicht klappt.
Da ich aber ein Totaler leihe bin was VB in Verbindung mit Exel angeht, hoffe ich das hier die entsprechenden Kompetenzen zu finden sind.

Es geht um die Auswertung von Störungen die in csv Datein gespeichert werden.
Diese liegen auf dem jeweiligen Gerät im Firmennetz und sind per ftp abrufbar.

Vorab eine Frage:

1. Frage geht es die Abfrage direkt vom ftp zu machen?
Wenn nicht werde ich sie einfach Local abspeichern lassen und diese dann Automatisch aktuliesieren lassen.

Die csv Datein befinden sich in folgenden Ordnern:

C:\Auftrag\... Hier liegt der Aktuelle Auftrag mit seinr Nummer Als Beispiel 123456
Beispiel: C:\123456\...

C:\Auftrag\Location1\ Hier ist der Standort mit Namen versehen Beispiel Location1 & Location2
Beispiel: C:\123456\Location1\...
Beispiel: C:\123456\Location2\...

a963081489fe57b97e3ceaeb584fd877

C:\Auftrag\Location1\0001... Hier sind die "Engines" Mit ihren Nummern gespeichert
Beispiel: C:\123456\Location1\0001\.... ( Hier Location1 mit Engine 0001) Dabei geht Location1 nur von 0001 bis 0019
Beispiel: C:\123456\Location2\0020\... ( Hier Location2 mit Engine 0020) Dabei geht Location2 nur von 0020 bis 0040


4d7dae88bc9a90d63e558bf6fd1b77b2

C:\Auftrag\Location1\0001\logs\...Im Ordner Logs wird für jeden Monat ein Ordner mit der jeweiligen Beschriftung 2015_07 für "Juli" angelegt.
In diesem Befinden sich dann die csv Datein die jeweils nach dem Tag Benannt sind an dem sie erstellt wurden
info_2015_07_01.csv für den ersten Juli.

9fa01b55cb1e97928f51472b7e22719b

6985492a708c72494d7ae44757e0f8dd

Beispiel:
C:\Auftrag\Location1\0001\logs\2015_07\log_2015_07_01.csv (...2015_07_01 bis ...2015_07_31)
C:\Auftrag\Location1\0001\logs\2015_08\log_2015_08_01.csv (...2015_08_01 bis ...2015_08_31)
(0001-0020)
C:\Auftrag\Location2\00020\logs\2015_07
(0021-0040)


Formatierung der csv
Timestamp;Comes;Goes;Duration;Variable;Message
07:49:00.680;;;;TEXT1TEXT;TEXT2TEXT

Die Exel Tabelle in der alles eingetragen werden soll, hat in der Zeile A1-H1 einen Header stehen der zum Filtern am Ende dient.
Das sieht wiefolgt aus:
Zelle
A1 = Ordernummer
B1 = Engine
C1 = Date [YYMMDD]
D1 = Time[hh:mm]
E1 = Errorcode
F1 = Errortext

Habe dazu im FOrum folgenden Code von "Culinardo"gefunden:

Sub ImportiereCSVDateien()
    Const CSVPFAD = "E:\csv-dateien"  
    Dim wbTarget As Workbook, wbSource As Workbook, ws As Worksheet, ts As Worksheet
    Set fso = CreateObject("Scripting.Filesystemobject")  
    Set wbTarget = ActiveWorkbook
    Application.DisplayAlerts = False
    'Lösche alle Worksheets bevor wir alle neu anlegen  
    While wbTarget.Worksheets.Count > 1
            wbTarget.Worksheets(1).Delete
    Wend
    wbTarget.Worksheets(1).Name = "Zusammenfassung"  
    wbTarget.Worksheets(1).Range("A:ZZ").Clear  
    For Each f In fso.GetFolder(CSVPFAD).Files
        If LCase(Right(f.Name, 3)) = "csv" Then  
            Workbooks.OpenText Filename:=f.Path
            Set wbSource = ActiveWorkbook
            On Error Resume Next
            Set ws = wbTarget.Worksheets(f.Name)
            If Err <> 0 Then
                Set ws = wbTarget.Worksheets.Add
                ws.Name = f.Name
                ws.Range("A:ZZ").Clear  
            End If
        
            wbSource.Worksheets(1).Range("A:A").TextToColumns Destination:=Range("A1"), DataType:=xlDelimited, TextQualifier:=xlDoubleQuote, ConsecutiveDelimiter:=False, Semicolon:=True, TrailingMinusNumbers:=True  
            wbSource.Worksheets(1).Range("A:ZZ").Copy Destination:=ws.Range("A1")  
            wbSource.Close False
        End If
    Next
    Set ts = wbTarget.Worksheets("Zusammenfassung")  
    Dim curCell As Range
    Set curCell = ts.Range("A1")  
    For i = 1 To wbTarget.Worksheets.Count - 1
        maxRow = wbTarget.Worksheets(i).Range("A1").End(xlDown).Row  
        maxCol = wbTarget.Worksheets(i).Range("A1").End(xlToRight).Column  
        wbTarget.Worksheets(i).Range(wbTarget.Worksheets(i).Cells(1, 1), wbTarget.Worksheets(i).Cells(maxRow, maxCol)).Copy Destination:=curCell
        Set curCell = curCell.End(xlDown).Offset(2, 0)
    Next
    Application.DisplayAlerts = True
    Set fso = Nothing
End Sub

Dieser Code ist an sich super nur müsste er an "meine" Bedürfnisse angepasst werden.

Es soll nur eine Exeldatei mit einer Exel Tabelle erstellt werden bzw. in die Vorhandene eingefügt werden.

"Auswertung.xlsx"

1. Die Daten sollen untereinander ohne die Headline aus der csv kopiert werden.
2. Sie sollen ab Zeile 2 Beginnen.
3. Timestamp aus der CSV soll in der Tabelle ab D2 anfangen, untereinander
4. Text2 soll bei E2 anfangen, untereinander
5. Die anderen Spalten sollen nicht aus der CSV kopiert werden.
6. In Spalte A ab A2 soll immer die Auftragsnummer erscheinen sobald in Spalte D2 oder E2 etwas steht.
7. In Spalte B ab B2 soll immer die Enginenummer (Bsp. 0001) aus dem Order übernommen werden, indem die CSV liegen die gerade eingetragen werden
Also gemeint ist das die csv's in einem Unter Ordner von Engine liegen aber der Bezug wichtig ist.
Beispiel: C:\...\0001\Logs\2015_08\Info_2015_08_01.csv
Das muss sein damit man das ganze hinterher alles nach Engine Filtern kann.
8. Spalte C ab C2 soll mit dem Datum versehen werden, was die csv Datei trägt aber wenn möglich formatiert in, ist aber kein muss(C2 = 150801)
Beispiel: C:\...\0001\Logs\2015_08\Info_2015_08_01.csv

Am Ende sieht das so aus :**
A2= 149860
B2= 0001
C2= 150807
D2= 15:16:26.548
E2= TEXT2

Ich hoffe das ich es jetzt besser dargestellt habe als vorher, bin morgen aber den ganzen Tag Online, da ich auf Arbeit damit gerade zu tun habe.

LG

Content-Key: 279724

Url: https://administrator.de/contentid/279724

Printed on: April 23, 2024 at 09:04 o'clock

Mitglied: 122990
122990 Aug 09, 2015 updated at 22:21:43 (UTC)
Goto Top
Moin,
einmal die Suchfunktion bemüht::

Ich würd das direkt mit Powershell machen, das geht fixer.
Aber deine Beschreibung ist leider etwas konfus, da du hier mehrere Spaltenreihenfolgen beschreibst kann man das nur schwer nachvollziehen. Eine Bereinigung und Nutzung der dir hier zu Verfügung stehenden Formatierungsmöglichkeiten, ständen dem Beitrag ganz gut.

Gruß grexit
Member: andreasp85
andreasp85 Aug 09, 2015 at 22:57:06 (UTC)
Goto Top
Guten Abend,
entschuldige bitte die Formatierung werden den Beitrag entsprechend erneuern.
Dann auch gleich die Such Ergenisse mit einfließen lassen, obwohl diese auch schon kenne.

Danke und bis morgen.

Lg
Mitglied: 122990
Solution 122990 Aug 11, 2015, updated at Aug 15, 2015 at 23:13:29 (UTC)
Goto Top
Mit Powershell lässt sich das ziemlich einfach und schnell so abbilden:
In Zeile 1 den Ordner angeben in dem die Auftragsordner '12345' etc. liegen (bitte kein Backslash am Ende angeben), und dann noch in Zeile 2 die Ausgabe-CSV-Datei angeben in der die Zusammengefassten Daten ausgegeben werden. Die kannst du dann nach dem Durchlauf in Excel direkt öffnen. Wurde hier nach deiner angegebenen Ordnerstruktur und dem Aufbau deiner CSV-Dateien einwandfrei getestet.
$folder = 'C:\Aufträge'  
$outputFile = 'C:\AusgabeOrdner\consolidated.csv'  
$consolidated = @()
gci $folder -Filter *.csv -recurse | %{
    $date = $_.Basename -replace '.*(\d{2})_(\d{2})_(\d{2}).*','$1$2$3'  
    $dir = $_.DirectoryName.replace($folder,'').split('\')  
    $auftrag = $dir[2]; $engine = $dir[3]
    $csv = Import-csv $_.FullName -Delimiter ";" -Encoding Default  
    $csv | Add-Member -MemberType NoteProperty -Name Ordernummer -Value $auftrag
    $csv | Add-Member -MemberType NoteProperty -Name Engine -Value $engine
    $csv | Add-Member -MemberType NoteProperty -Name Date -Value $date
    $consolidated += $csv
}
$consolidated | select Ordernummer,Engine,Date,Timestamp,Variable,Message | export-csv $outputFile -Delimiter ';' -NoType -Encoding UTF8  
Gruß grexit
Member: andreasp85
andreasp85 Aug 12, 2015 at 21:19:47 (UTC)
Goto Top
Guten Abend, da musste ich mich doch erstmal mit Powershekk beschäftigen.
Vielen Danke erstmal für die ganze Arbeit.

Ich habe glaube ich etwas nicht ganz Erklärt oder falsch.
Das Script als solches ist super und funktioniert auch, aber ich bekomme leider nicht alle Dazugehörigen Daten.
Bei manchen Daten sin Buchstaben nicht gelesen wurden dadurch sind viele Datensätze nicht mehr gleich.
Beispiel: �No Wommunication�witp HeadGontrgl Aisle�16:3�:17>040 16:39:07.�08


Die Tabelle sieht bei mir so aus:

Ordernummer Engine Date Timestamp Variable Message
Location1 Logs 20150701 07:49:00.680 TEXT

Statt Location steht sollte aber die Auftragsnummer "123456" (Beispiel) stehen.
Bei Engine sollten die Nummern der Egine stehen aus der die Spalte extrahiert wurde.
Damit die Daten auch der richtigen Engine zugeordnet werden können.

Habe es 1zu1 ausgeführt, wenn wir dieses 3 Probleme nocht in den griff bekommen wäre das super.

Vielen Dank und einen schönen Abend noch.
Mitglied: 122990
Solution 122990 Aug 13, 2015, updated at Aug 15, 2015 at 23:13:42 (UTC)
Goto Top
Zitat von @andreasp85:
Das Script als solches ist super und funktioniert auch, aber ich bekomme leider nicht alle Dazugehörigen Daten.
Bei manchen Daten sin Buchstaben nicht gelesen wurden dadurch sind viele Datensätze nicht mehr gleich.
Beispiel: �No Wommunication�witp HeadGontrgl Aisle�16:3�:17>040 16:39:07.�08
Dazu musst du das Encoding der Dateien in Zeile 8 an deine Dateien anpassen (UTF8, etc). Bitte beachten das dieser Parameter erst ab Powershell 3.0 verfügbar ist. D.h. Wenn du noch PS 2.0 verwendest musst du ein Update fahren!

Die Tabelle sieht bei mir so aus:

Ordernummer Engine Date Timestamp Variable Message
Location1 Logs 20150701 07:49:00.680 TEXT

Statt Location steht sollte aber die Auftragsnummer "123456" (Beispiel) stehen.
Bei Engine sollten die Nummern der Egine stehen aus der die Spalte extrahiert wurde.
Damit die Daten auch der richtigen Engine zugeordnet werden können.

Ok da hatte ich den Arrayeintrag in Zeile 7 für die Auftragsnummer eine Nummer zu klein gewählt, ist korrigiert.
Member: andreasp85
andreasp85 Aug 14, 2015 at 00:00:01 (UTC)
Goto Top
Guten Abend, also Version 3.0 habe ich aber leider kommen immer wieder Fehler beim lesen, also wie oben besprochen.
�No Wommunication�witp HeadGontrgl Aisle�16:3�:17>040 16:39:07.�08
diese tritt bei hunderten Zeilen auf evtl, sind die Datenmengen zu groß.

Gibt es da noch eine möglichekit dieses zu lösen.
Das zweite Problem ist, was mir heute aufgefallen ist, dass das Datum leider immer verschieden in der Spalte "Date" steht, die Formatierung ist nicht einhaltlich.
Wenn ich dir daten schicke, ist es dir dann möglich evtl. eine genauere Analyse zu machen?
Mitglied: 122990
122990 Aug 14, 2015 updated at 06:23:05 (UTC)
Goto Top
Zitat von @andreasp85:
diese tritt bei hunderten Zeilen auf evtl, sind die Datenmengen zu groß.
Nein, definitiv nicht.
Gibt es da noch eine möglichekit dieses zu lösen.
Liegt zu 100 % an deinen Daten und deren Kodierung!
Das zweite Problem ist, was mir heute aufgefallen ist, dass das Datum leider immer verschieden in der Spalte "Date"
steht, die Formatierung ist nicht einhaltlich.
Dann musst du das auch erwähnen das das Datum auch anders vorliegen kann...Hellsehen kann ich nicht face-sad
Wenn ich dir daten schicke, ist es dir dann möglich evtl. eine genauere Analyse zu machen?
Klar, aber umsons is der Gefatter noch nich tot.
Member: andreasp85
andreasp85 Aug 15, 2015 updated at 13:47:16 (UTC)
Goto Top
Zitat von @122990:

Zitat von @andreasp85:
diese tritt bei hunderten Zeilen auf evtl, sind die Datenmengen zu groß.
Nein, definitiv nicht.
Gibt es da noch eine möglichekit dieses zu lösen.
Liegt zu 100 % an deinen Daten und deren Kodierung!
Hab es gelöst, einfach die Daten in den Monats Ordern ausgelesen und dann diese nochmals auswerten lassen, das klappt ohne Probleme.
Das zweite Problem ist, was mir heute aufgefallen ist, dass das Datum leider immer verschieden in der Spalte "Date"
steht, die Formatierung ist nicht einhaltlich.
Dann musst du das auch erwähnen das das Datum auch anders vorliegen kann...Hellsehen kann ich nicht face-sad
Das geht doch aus den obenen Beschreibung hervor jeder Monat 1 Ordner (Bsp.2015_08), jeder Tag eine Datei (2015_08_01).
Dachte das wäre verständlich, mein Fehler face-smile
Wenn ich dir daten schicke, ist es dir dann möglich evtl. eine genauere Analyse zu machen?
Klar, aber umsons is der Gefatter noch nich tot.
Ja ich kenne mich mit Powershell noch nicht so aus... Werde mal sehen ob ich es auch so hinbekomme.

Vielen Dank für deinen Einsatz und deine Geduld mit mir.
Mitglied: 122990
122990 Aug 15, 2015 updated at 15:36:13 (UTC)
Goto Top
Zitat von @andreasp85:
Das geht doch aus den obenen Beschreibung hervor jeder Monat 1 Ordner (Bsp.2015_08), jeder Tag eine Datei (2015_08_01).
Dachte das wäre verständlich, mein Fehler face-smile
Mein Skript nimmt nur das Datum aus dem Dateinamen ! Und das steht nicht in deinem Beitrag das das unterschiedlich formatiert wäre .., sondern immer YYYY_MM_DD
Wenn man weiß welche Formate vorkommen kann man das natürlich anpassen, deswegen meine angesprochene "Glaskugel" ...
Member: andreasp85
andreasp85 Aug 15, 2015 at 19:30:38 (UTC)
Goto Top
Zitat von @122990:

> Zitat von @andreasp85:
> Das geht doch aus den obenen Beschreibung hervor jeder Monat 1 Ordner (Bsp.2015_08), jeder Tag eine Datei (2015_08_01).
> Dachte das wäre verständlich, mein Fehler face-smile
Mein Skript nimmt nur das Datum aus dem Dateinamen ! Und das steht nicht in deinem Beitrag das das unterschiedlich formatiert
wäre .., sondern immer YYYY_MM_DD
Wenn man weiß welche Formate vorkommen kann man das natürlich anpassen, deswegen meine angesprochene
"Glaskugel" ...
Also die Formatierung ist immer gleich, Info_2015_07_01.csv als Beispiel. Da hast du alle richtig gemacht.
Ab und zu kommt es aber vor das er es falsch zu lesen scheint, habe es aber mit dem erstellen mehrer Datein und deren vereinigng am Ende weg bekommen.

Ich denke mal den rest bekomme ich auch noch hin. Das die Auftragsnummer in der CSV auch in Spalte 1 Steht und das in jeder Zeile die angefügt wird.
Mal schauen was die Glaskugel sagt face-smile