Thema Datum  Von Nutzer Rating
Antwort
15.06.2021 14:30:14 Basti
NotSolved
15.06.2021 14:56:04 Gast16801
NotSolved
15.06.2021 15:12:36 Basti
NotSolved
15.06.2021 16:40:43 Ulrich
*****
NotSolved
16.06.2021 11:25:33 Basti
NotSolved
17.06.2021 15:22:17 Ulrich
*****
NotSolved
18.06.2021 10:52:52 Basti
NotSolved
20.06.2021 12:31:06 Ulrich
NotSolved
19.06.2021 21:12:18 Gast69704
NotSolved
18.06.2021 19:58:32 Zwenn
NotSolved
18.06.2021 20:31:42 Zwenn
NotSolved
20.06.2021 19:55:16 Ulrich
NotSolved
20.06.2021 20:27:26 Ulrich
NotSolved
Blau PowerQuery
20.06.2021 20:27:28 Ulrich
NotSolved
21.06.2021 08:28:20 Basti
NotSolved
21.06.2021 14:44:33 Gast36288
NotSolved

Ansicht des Beitrags:
Von:
Ulrich
Datum:
20.06.2021 20:27:28
Views:
496
Rating: Antwort:
  Ja
Thema:
PowerQuery

Hallo Basti,

irgendwo hast du ja noch geschrieben, dass du gerne aufeinanderfolgende Trennzeichen wie ein einziges behandeln würdest. Damit wird bei einer korrekten CSV Datei natürlich die Spaltenzugehörigkeit aufgegeben, also wenn es leere Zellen gibt, können die Inhalte in die falsche Spalte verschoben werden. Da ich gerade vor ein paar Tagen angefangen habe, mich mit PowerQuery etwas näher zu beschäftigen, habe ich da einfach mal rumgespielt und diese Lösung erarbeitet (wie gesagt, ich bin noch Anfänger, wer also konstruktive Anmerkungen hat, darüber freue ich mich - mir ist aber auch klar, dass wir hier in einem VBA-Forum sind).

Hier mein M-Code:

/* Import einer CSV-Datei. Aufeinanderfolgende Trennzeichen werden wie eines behandelt => ! Spaltenzugehörigkeit geht verloren ! 
*/

let
    CSVFILE = "E:\tmp\del\die.txt",
    DELIMITER = "#(tab)",  // Tabulator wäre: "#(tab)", 
    Source = Table.FromColumns({Lines.FromBinary(File.Contents(CSVFILE), null, null, 65001)}),
    // doppelte Trennzeichen löschen
    deleted_dbl_delims =
            Table.ReplaceValue(Source,"","",
                    (thetext as nullable text, old as text, new as text) =>
                        Text.Combine(List.RemoveMatchingItems(Text.Split(thetext, DELIMITER), {""}), DELIMITER),
                    {"Column1"}
            ),

    // Table.SplitColumn() orientiert sich ohne Angabe der optionalen Spaltennamen an der ersten Zeile. Es können Daten verloren gehen!
    // Daher: zu erstellende Spalten zählen und Spaltennamen generieren
    f_count_columns = (the_text as text) => 
                            if List.Contains({"", null}, the_text)
                            then 0 
                            else List.Count(Text.Split(the_text, DELIMITER)),
    new_columns_count = List.Max(
                    List.Generate(
                            () => [ i = 0, count = f_count_columns(deleted_dbl_delims[Column1]{i}) ],
                            (_) => [i] < List.Count(deleted_dbl_delims[Column1]),
                            (_) => [ i = _[i]+1, count = f_count_columns(deleted_dbl_delims[Column1]{i}) ],
                            (_) => _[count]
                    )),
    splitted = Table.SplitColumn(deleted_dbl_delims, 
                    "Column1", 
                    Splitter.SplitTextByDelimiter(DELIMITER, null),
                    List.Generate(                  // new_columns_count Spaltennamen erzeugen
                        ()  => [i = 1, column_name = Text.Combine({"col ", Text.From(i)}) ],
                        (_) => _[i] < new_columns_count + 1,
                        (_)  => [i = _[i]+1,   column_name = Text.Combine({"col ", Text.From(i)}) ],
                        (_) => _[column_name]
                    )
                )
in
    splitted

 

Das ist kein VBA!

Falls du überhaupt nicht weißt, wovon ich spreche und es dennoch ausprobieren möchtest, kannst du einfach eine neue Datei nehmen (bestehende geht auch, aber zum Auspbrobieren)...

Bei mir unter Excel2016 geht das so:

Über Daten => Abrufen und Transformieren => neue Abfrage => Aus anderen Quellen => leere Abfrage
das öffnet den PowerQuery Editor.

Hier kannst du auf links oben unter "Home" => "Abfrage" => auf "Erweiterter Editor" klicken. Jetzt öffnet sich ein Fenster in welchem wahrscheinlich 4 Codezeilen stehen. Die kannst du einfach rauslöschen und stattdessen meine hineinkopieren.

Jetzt musst du noch in der ersten Codezeile den Pfad zu deiner Textdatei anpassen.

Wenn du nun den Erweiterten Editor über "Fertig" verlässt, solltest du bereits die Daten sehen.

Jetzt gilt es nur noch auf "Speichern und Laden" (Oder "Speichern und laden in") zu klicken und schon hast du die Daten in einem neuen (oder wahlweise auch in einem bestehenden) Tabellenblatt. Der Import wird direkt als "Intelligente Tabelle" abgelegt.

 

Jederzeit kannst du nun auf mit Rechtsklick auf der "Intelligenten Tabelle" das Kontextmenü aufrufen und dort über "Aktualisieren" die Daten erneut einlesen (vielleicht hat sich die Datei ja geändert ...).

Das Aktualisieren klappt natürlich auch über "Daten" => "Verbindungen" => ...

Wenn du eine andere Excelversion hast, dann kann der Weg mehr oder weniger anders heißen.

 

Grüße, Ulrich


Ihre Antwort
  • Bitte beschreiben Sie Ihr Problem möglichst ausführlich. (Wichtige Info z.B.: Office Version, Betriebssystem, Wo genau kommen Sie nicht weiter)
  • Bitte helfen Sie ebenfalls wenn Ihnen geholfen werden konnte und markieren Sie Ihre Anfrage als erledigt (Klick auf Häckchen)
  • Bei Crossposting, entsprechende Links auf andere Forenbeiträge beifügen / nachtragen
  • Codeschnipsel am besten über den Code-Button im Text-Editor einfügen
  • Die Angabe der Emailadresse ist freiwillig und wird nur verwendet, um Sie bei Antworten auf Ihren Beitrag zu benachrichtigen
Thema: Name: Email:



  • Bitte beschreiben Sie Ihr Problem möglichst ausführlich. (Wichtige Info z.B.: Office Version, Betriebssystem, Wo genau kommen Sie nicht weiter)
  • Bitte helfen Sie ebenfalls wenn Ihnen geholfen werden konnte und markieren Sie Ihre Anfrage als erledigt (Klick auf Häckchen)
  • Bei Crossposting, entsprechende Links auf andere Forenbeiträge beifügen / nachtragen
  • Codeschnipsel am besten über den Code-Button im Text-Editor einfügen
  • Die Angabe der Emailadresse ist freiwillig und wird nur verwendet, um Sie bei Antworten auf Ihren Beitrag zu benachrichtigen

Thema Datum  Von Nutzer Rating
Antwort
15.06.2021 14:30:14 Basti
NotSolved
15.06.2021 14:56:04 Gast16801
NotSolved
15.06.2021 15:12:36 Basti
NotSolved
15.06.2021 16:40:43 Ulrich
*****
NotSolved
16.06.2021 11:25:33 Basti
NotSolved
17.06.2021 15:22:17 Ulrich
*****
NotSolved
18.06.2021 10:52:52 Basti
NotSolved
20.06.2021 12:31:06 Ulrich
NotSolved
19.06.2021 21:12:18 Gast69704
NotSolved
18.06.2021 19:58:32 Zwenn
NotSolved
18.06.2021 20:31:42 Zwenn
NotSolved
20.06.2021 19:55:16 Ulrich
NotSolved
20.06.2021 20:27:26 Ulrich
NotSolved
Blau PowerQuery
20.06.2021 20:27:28 Ulrich
NotSolved
21.06.2021 08:28:20 Basti
NotSolved
21.06.2021 14:44:33 Gast36288
NotSolved