23.02.2023, 14:10 (Dieser Beitrag wurde zuletzt bearbeitet: 23.02.2023, 14:28 von Wollkopf.)
Hallo zusammen,
ich benutze Excel größtenteils für statistische Auswertung und habe damit auch grundlegende Erfahrung. Nun stehe ich allerdings vor mehreren Problemen, bei denen ich nicht so recht weiter weiß.
Ausgangssituation: Ich habe 9 Sensoren, von denen jeder Sensor 10 Messwerte pro Sekunde erzeugt. Dazu kommen jeweils noch 2 Zeitpunkte pro Sekunde. Die Ergebnisse werden in einer edf-Datei gespeichert. Beim importieren in Excel fängt das Problem schon an.
Über Daten -> Daten aus Text/CSV finde ich keine Einstellung, mit welcher ich die Daten vernünftig dargestellt bekomme.
Über Datei -> Öffnen und dann Auswahl der edf-Datei kann ich die Daten importieren (Tabstopp und Leerzeichen als Trennzeichen), die Daten werden den richtigen Spalten zugeordnet und ich kann die Zahlen im richtigen Format mit Dezimalkomma ohne Tausenderpunkt darstellen. Leider gehen mir dabei Werte verloren (ich habe keine Ahnung warum, aber es fehlen Werte unterschiedlicher Anzahl in den hintersten Spalten).
Öffne ich die edf-Datei im Editor und kopiere die Daten nach Excel oder ziehe ich die edf-Datei per Drag&Drop in die Excel Tabelle habe ich alle Daten und es wird alles erkannt -> Deshalb nutze ich diesen Weg und kann damit gut leben.
Das Problem: Zur Übersicht: Spalten A-L im angehängten Screenshot zeigen in A und B die Zeitpunkte und in den Spalten C bis L die Messwerte.
1. Problem Wie man sehen sind dort leere Zellen vorhanden. Dies liegt daran, dass die Sensoren nicht komplett synchron sind und es teilweise zu einem 0,1 s Versatz kommt.
2. Problem Außerdem sind die Zellen der Messwerte teilweise im Format Standard (Werte unter 1) und teilweise als Zahl formatiert.
3. Problem Der Wert in C10 sollte nicht 8.237.551 sondern 8,237551 sein.
Wie bekomme ich es nun hin, dass die Zellen als Zahl formatiert werden, die Leerzellen dann aber nicht als 0,00 dargestellt werden und ich auch noch das Zahlenformat ändern kann um dann die ganzen Messungen weiter auszuwerten.
Falls irgendetwas nicht verständlich war, fragt gerne. Es sind halt echt viele Daten, weshalb ich mich, wenn möglich, über eine generelle Lösung freuen würde bei der ich nicht einzelne Zellen formatieren muss.
(23.02.2023, 14:10)Wollkopf schrieb: [*]Über Daten -> Daten aus Text/CSV finde ich keine Einstellung, mit welcher ich die Daten vernünftig dargestellt bekomme.
Damit importierst Du die Daten mit Power Query, dort hast Du doch alle Möglichkeiten, die Daten anzupassen wenn Du auf "Daten transformieren" gehst ... Damit sollte Problem Nummer 2 und 3 erstmal gelöst sein. Bei Problem Nummer 1 gibt es in Power Query sicher auch eine Lösung, die aber möglicherweise (aus dem Gefühl heraus) nicht ganz so trivial ist.
Um die Hilfsbereiten Kollegen hier etwas zu unterstützen, wäre es sinnvoll statt einem Screenshot hier eine richtige Datei hochzuladen. In Deinem Fall wäre eine Original-Datei von Vorteil und nicht die verunglückte Excel-Datei.
23.02.2023, 14:56 (Dieser Beitrag wurde zuletzt bearbeitet: 23.02.2023, 14:58 von Wollkopf.)
Wie gesagt, über PowerQuery bekomme ich dass jedenfalls nicht hin.
Ich würde auch gerne neben der Excel-Datei, welche ich auch schon im ersten Beitrag hinzugefügt habe, die edf-Datei hochladen, aber das erlaubt die Forensoftware nicht (Dateityp ist nicht erlaubt) und als txt ist die Datei größer als das erlaubte 500 KB Limit.
EDIT: Ich habe eine andere, nur mit 6 Sensoren erzeugte von edf zu txt umgewandelte, Datei angehangen (kleine als 500 KB)
den folgenden Code kannst Du im Power Query Editor (eine leere Abfrage erstellen) unter "Ansicht" im "Erweiterten Editor" einfügen (nicht vergessen, den korrekten Pfad anzugeben):
Code:
let Quelle = Csv.Document(File.Contents("C:\Pfad zu Deiner Datei\Beispiel.txt"),[Delimiter="#(tab)", Columns=62, Encoding=1252, QuoteStyle=QuoteStyle.None]), #"Entfernte oberste Zeilen" = Table.Skip(Quelle,5), #"Höher gestufte Header" = Table.PromoteHeaders(#"Entfernte oberste Zeilen", [PromoteAllScalars=true]), #"Geänderter Typ mit Gebietsschema" = Table.TransformColumnTypes(#"Höher gestufte Header", {{"MassConc_1p0_SPS30num6_BC8EE0BD289D6607", type number}, {"MassConc_2p5_SPS30num6_BC8EE0BD289D6607", type number}, {"MassConc_4p0_SPS30num6_BC8EE0BD289D6607", type number}, {"MassConc_10p_SPS30num6_BC8EE0BD289D6607", type number}, {"NumbConc_0p5_SPS30num6_BC8EE0BD289D6607", type number}, {"NumbConc_1p0_SPS30num6_BC8EE0BD289D6607", type number}, {"NumbConc_2p5_SPS30num6_BC8EE0BD289D6607", type number}, {"NumbConc_4p0_SPS30num6_BC8EE0BD289D6607", type number}, {"NumbConc_10p_SPS30num6_BC8EE0BD289D6607", type number}, {"TypPartSize_SPS30num6_BC8EE0BD289D6607", type number}, {"MassConc_1p0_SPS30num5_1E407D2B29B24116", type number}, {"MassConc_2p5_SPS30num5_1E407D2B29B24116", type number}, {"MassConc_4p0_SPS30num5_1E407D2B29B24116", type number}, {"MassConc_10p_SPS30num5_1E407D2B29B24116", type number}, {"NumbConc_0p5_SPS30num5_1E407D2B29B24116", type number}, {"NumbConc_1p0_SPS30num5_1E407D2B29B24116", type number}, {"NumbConc_2p5_SPS30num5_1E407D2B29B24116", type number}, {"NumbConc_4p0_SPS30num5_1E407D2B29B24116", type number}, {"NumbConc_10p_SPS30num5_1E407D2B29B24116", type number}, {"TypPartSize_SPS30num5_1E407D2B29B24116", type number}, {"MassConc_1p0_SPS30num4_6243E5847331E70B", type number}, {"MassConc_2p5_SPS30num4_6243E5847331E70B", type number}, {"MassConc_4p0_SPS30num4_6243E5847331E70B", type number}, {"MassConc_10p_SPS30num4_6243E5847331E70B", type number}, {"NumbConc_0p5_SPS30num4_6243E5847331E70B", type number}, {"NumbConc_1p0_SPS30num4_6243E5847331E70B", type number}, {"NumbConc_2p5_SPS30num4_6243E5847331E70B", type number}, {"NumbConc_4p0_SPS30num4_6243E5847331E70B", type number}, {"NumbConc_10p_SPS30num4_6243E5847331E70B", type number}, {"TypPartSize_SPS30num4_6243E5847331E70B", type number}, {"MassConc_1p0_SPS30num3_C5288BBD07AD8AEC", type number}, {"MassConc_2p5_SPS30num3_C5288BBD07AD8AEC", type number}, {"MassConc_4p0_SPS30num3_C5288BBD07AD8AEC", type number}, {"MassConc_10p_SPS30num3_C5288BBD07AD8AEC", type number}, {"NumbConc_0p5_SPS30num3_C5288BBD07AD8AEC", type number}, {"NumbConc_1p0_SPS30num3_C5288BBD07AD8AEC", type number}, {"NumbConc_2p5_SPS30num3_C5288BBD07AD8AEC", type number}, {"NumbConc_4p0_SPS30num3_C5288BBD07AD8AEC", type number}, {"NumbConc_10p_SPS30num3_C5288BBD07AD8AEC", type number}, {"TypPartSize_SPS30num3_C5288BBD07AD8AEC", type number}, {"MassConc_1p0_SPS30num2_21F2DB63F967B6B3", type number}, {"MassConc_2p5_SPS30num2_21F2DB63F967B6B3", type number}, {"MassConc_4p0_SPS30num2_21F2DB63F967B6B3", type number}, {"MassConc_10p_SPS30num2_21F2DB63F967B6B3", type number}, {"NumbConc_0p5_SPS30num2_21F2DB63F967B6B3", type number}, {"NumbConc_1p0_SPS30num2_21F2DB63F967B6B3", type number}, {"NumbConc_2p5_SPS30num2_21F2DB63F967B6B3", type number}, {"NumbConc_4p0_SPS30num2_21F2DB63F967B6B3", type number}, {"NumbConc_10p_SPS30num2_21F2DB63F967B6B3", type number}, {"TypPartSize_SPS30num2_21F2DB63F967B6B3", type number}, {"MassConc_1p0_SPS30num1_D592CCA154EEBE1C", type number}, {"MassConc_2p5_SPS30num1_D592CCA154EEBE1C", type number}, {"MassConc_4p0_SPS30num1_D592CCA154EEBE1C", type number}, {"MassConc_10p_SPS30num1_D592CCA154EEBE1C", type number}, {"NumbConc_0p5_SPS30num1_D592CCA154EEBE1C", type number}, {"NumbConc_1p0_SPS30num1_D592CCA154EEBE1C", type number}, {"NumbConc_2p5_SPS30num1_D592CCA154EEBE1C", type number}, {"NumbConc_4p0_SPS30num1_D592CCA154EEBE1C", type number}, {"NumbConc_10p_SPS30num1_D592CCA154EEBE1C", type number}, {"TypPartSize_SPS30num1_D592CCA154EEBE1C", type number}}, "en-US"), #"Spalte nach Trennzeichen teilen" = Table.SplitColumn(#"Geänderter Typ mit Gebietsschema", "Local_Date_Time", Splitter.SplitTextByDelimiter("T", QuoteStyle.Csv), {"Local_Date_Time.1", "Local_Date_Time.2"}), #"Geänderter Typ" = Table.TransformColumnTypes(#"Spalte nach Trennzeichen teilen",{{"Epoch_UTC", Int64.Type}, {"Local_Date_Time.1", type date}, {"Local_Date_Time.2", type text}}) in #"Geänderter Typ"
Damit sollten die Zahlen passen. Wenn Du noch die Leerzeilen ausblenden willst, wäre gut zu wissen, ob dann immer die ganze Zeile leer ist oder ob es sein kann, dass nur einzelne Felder leer sind. Sind es immer ganze Zeilen, dann kann man die Leerzeilen per Filter im PQ-Editor auch noch entfernen.
23.02.2023, 15:35 (Dieser Beitrag wurde zuletzt bearbeitet: 23.02.2023, 15:54 von Wollkopf.)
Okay, das versuche Ich gleich mal. Auf jeden Fall schon einmal vielen Dank für die Mühe. Bei den Leerzellen handelt es sich leider wirklich um leere Zellen, welche zwar teilweise zusammenhängen, aber nie eine ganze Zeile lang. Also für diese eine Datei klappt das, auch wenn man das Zellformat nachträglich noch ändern muss.
Aber ich glaube ich muss mich dann wirklich mal intensiv mit Power Query auseinander setzen, denn so klappt das leider nur für die eine Datei, da sich die Spaltennamen, bzw. deren Reihenfolge bei jedem Start des Messprogramms (welches die edf erstellt) ändert...
Trotzdem vielen Dank! Die erstellte Excel-Datei habe ich nochmal angefügt
23.02.2023, 16:23 (Dieser Beitrag wurde zuletzt bearbeitet: 23.02.2023, 16:24 von Der Steuerfuzzi.)
(23.02.2023, 15:35)Wollkopf schrieb: Also für diese eine Datei klappt das, auch wenn man das Zellformat nachträglich noch ändern muss.
Was musst Du da noch ändern?
(23.02.2023, 15:35)Wollkopf schrieb: so klappt das leider nur für die eine Datei, da sich die Spaltennamen, bzw. deren Reihenfolge bei jedem Start des Messprogramms (welches die edf erstellt) ändert...
Wenn es nur die Überschriften sind, dann kannst Du diese Zeile einfach beim Einlesen mitlöschen. PQ ersetzt die Spaltennamen dann durch Column1 ... etc.
Code:
let Quelle = Csv.Document(File.Contents("C:\Pfad zu Deiner Datei\Beispiel.txt"),[Delimiter="#(tab)", Columns=62, Encoding=1252, QuoteStyle=QuoteStyle.None]), #"Entfernte oberste Zeilen" = Table.Skip(Quelle,6), #"Spalte nach Trennzeichen teilen" = Table.SplitColumn(#"Entfernte oberste Zeilen", "Column2", Splitter.SplitTextByDelimiter("T", QuoteStyle.Csv), {"Column2.1", "Column2.2"}), #"Geänderter Typ mit Gebietsschema" = Table.TransformColumnTypes(#"Spalte nach Trennzeichen teilen", {{"Column3", type number}, {"Column4", type number}, {"Column5", type number}, {"Column6", type number}, {"Column7", type number}, {"Column8", type number}, {"Column9", type number}, {"Column10", type number}, {"Column11", type number}, {"Column12", type number}, {"Column13", type number}, {"Column14", type number}, {"Column15", type number}, {"Column16", type number}, {"Column17", type number}, {"Column18", type number}, {"Column19", type number}, {"Column20", type number}, {"Column21", type number}, {"Column22", type number}, {"Column23", type number}, {"Column24", type number}, {"Column25", type number}, {"Column26", type number}, {"Column27", type number}, {"Column28", type number}, {"Column29", type number}, {"Column30", type number}, {"Column31", type number}, {"Column32", type number}, {"Column33", type number}, {"Column34", type number}, {"Column35", type number}, {"Column36", type number}, {"Column37", type number}, {"Column38", type number}, {"Column39", type number}, {"Column40", type number}, {"Column41", type number}, {"Column42", type number}, {"Column43", type number}, {"Column44", type number}, {"Column45", type number}, {"Column46", type number}, {"Column47", type number}, {"Column48", type number}, {"Column49", type number}, {"Column50", type number}, {"Column51", type number}, {"Column52", type number}, {"Column53", type number}, {"Column54", type number}, {"Column55", type number}, {"Column56", type number}, {"Column57", type number}, {"Column58", type number}, {"Column59", type number}, {"Column60", type number}, {"Column61", type number}, {"Column62", type number}}, "en-US"), #"Geänderter Typ" = Table.TransformColumnTypes(#"Geänderter Typ mit Gebietsschema",{{"Column2.1", type date}}) in #"Geänderter Typ"
Sub M_snb() c00 = CreateObject("scripting.filesystemobject").opentextfile("G:\OF\beispiel_snb.txt").readall sn = Split(c00, vbLf & "16") For j = 1 To UBound(sn) st = Split("16" & sn(j), vbTab) Sheet2.Cells(j + 6, 1).Resize(, UBound(st)) = st Next End Sub
23.02.2023, 16:52 (Dieser Beitrag wurde zuletzt bearbeitet: 23.02.2023, 16:54 von Wollkopf.)
(23.02.2023, 16:23)Der Steuerfuzzi schrieb: Was musst Du da noch ändern?
Wenn es nur die Überschriften sind, dann kannst Du diese Zeile einfach beim Einlesen mitlöschen. PQ ersetzt die Spaltennamen dann durch Column1 ... etc.
Code:
let Quelle = Csv.Document(File.Contents("C:\Pfad zu Deiner Datei\Beispiel.txt"),[Delimiter="#(tab)", Columns=62, Encoding=1252, QuoteStyle=QuoteStyle.None]), #"Entfernte oberste Zeilen" = Table.Skip(Quelle,6), #"Spalte nach Trennzeichen teilen" = Table.SplitColumn(#"Entfernte oberste Zeilen", "Column2", Splitter.SplitTextByDelimiter("T", QuoteStyle.Csv), {"Column2.1", "Column2.2"}), #"Geänderter Typ mit Gebietsschema" = Table.TransformColumnTypes(#"Spalte nach Trennzeichen teilen", {{"Column3", type number}, {"Column4", type number}, {"Column5", type number}, {"Column6", type number}, {"Column7", type number}, {"Column8", type number}, {"Column9", type number}, {"Column10", type number}, {"Column11", type number}, {"Column12", type number}, {"Column13", type number}, {"Column14", type number}, {"Column15", type number}, {"Column16", type number}, {"Column17", type number}, {"Column18", type number}, {"Column19", type number}, {"Column20", type number}, {"Column21", type number}, {"Column22", type number}, {"Column23", type number}, {"Column24", type number}, {"Column25", type number}, {"Column26", type number}, {"Column27", type number}, {"Column28", type number}, {"Column29", type number}, {"Column30", type number}, {"Column31", type number}, {"Column32", type number}, {"Column33", type number}, {"Column34", type number}, {"Column35", type number}, {"Column36", type number}, {"Column37", type number}, {"Column38", type number}, {"Column39", type number}, {"Column40", type number}, {"Column41", type number}, {"Column42", type number}, {"Column43", type number}, {"Column44", type number}, {"Column45", type number}, {"Column46", type number}, {"Column47", type number}, {"Column48", type number}, {"Column49", type number}, {"Column50", type number}, {"Column51", type number}, {"Column52", type number}, {"Column53", type number}, {"Column54", type number}, {"Column55", type number}, {"Column56", type number}, {"Column57", type number}, {"Column58", type number}, {"Column59", type number}, {"Column60", type number}, {"Column61", type number}, {"Column62", type number}}, "en-US"), #"Geänderter Typ" = Table.TransformColumnTypes(#"Geänderter Typ mit Gebietsschema",{{"Column2.1", type date}}) in #"Geänderter Typ"
Mir wird als Zellformat immer noch Standard angezeigt. Aber damit kann ich leben.
Den Code werde ich so probieren! Danke für die Hilfe!
(23.02.2023, 16:47)snb schrieb: Ich würde empfehlen:
Code:
Sub M_snb() c00 = CreateObject("scripting.filesystemobject").opentextfile("G:\OF\beispiel_snb.txt").readall sn = Split(c00, vbLf & "16") For j = 1 To UBound(sn) st = Split("16" & sn(j), vbTab) Sheet2.Cells(j + 6, 1).Resize(, UBound(st)) = st Next End Sub
Dazu brauche ich ein wenig Erläuterung... Z.B. wo gebe ich das ein und am besten noch welche Sprache ist das, damit ich gucken kann was die einzelnen Zeilen bedeuten...? Sorry, Noob hier...