Metoda 2: Łączenie plików Excel z folderu w języku M (dla zaawansowanych)
Jeśli chcesz mieć pełną kontrolę nad procesem – np. filtrować pliki po nazwie, wybierać konkretny arkusz czy zachować dodatkowe metadane – warto poznać kod w języku M, czyli języku programistycznym stojącym za Power Query. Szukaj: power query kod m
Jak wkleić kod M w Power Query
Excel: Dane → Pobierz dane → Inne źródła → Puste zapytanie
→ Widok → Edytor zaawansowany → Wklej kod → Gotowe
Podstawowy kod M: łączenie wszystkich plików .xlsx z folderu
// ============================================
// KOD M: Łączenie wszystkich plików .xlsx z folderu
// ============================================
let
// KROK 1: Ścieżka do folderu (zmień na swoją!)
ŚcieżkaFolderu = "C:\Users\krzys\OneDrive\Pulpit\dane_PQ",
// KROK 2: Pobierz listę plików z folderu
ZawartośćFolderu = Folder.Files(ŚcieżkaFolderu),
// KROK 3: Filtruj tylko pliki Excel (.xlsx / .xls)
TylkoExcel = Table.SelectRows(
ZawartośćFolderu,
each Text.EndsWith([Extension], ".xlsx") or Text.EndsWith([Extension], ".xls")
),
// KROK 4: Dodaj kolumnę z nazwą pliku (bez rozszerzenia)
ZNazwąPliku = Table.AddColumn(
TylkoExcel,
"NazwaPliku",
each Text.BeforeDelimiter([Name], "."),
type text
),
// KROK 5: Funkcja wczytująca dane z pojedynczego pliku
WczytajPlik = (plikBinarny as binary) as table =>
let
Źródło = Excel.Workbook(plikBinarny, null, true),
PierwszyArkusz = Źródło{0}[Data],
Nagłówki = Table.PromoteHeaders(PierwszyArkusz, [PromoteAllScalars=true])
in
Nagłówki,
// KROK 6: Dodaj kolumnę z wczytanymi tabelami
WczytaneTabele = Table.AddColumn(
ZNazwąPliku,
"DaneZPliku",
each WczytajPlik([Content]),
type table
),
// KROK 7: Połącz wszystkie tabele w jedną
NazwyKolumn = Table.ColumnNames(WczytaneTabele[DaneZPliku]{0}),
PołączoneDane = Table.ExpandTableColumn(
WczytaneTabele,
"DaneZPliku",
NazwyKolumn
),
// KROK 8: Usuń kolumny systemowe (opcjonalnie)
BezZbędnych = Table.RemoveColumns(
PołączoneDane,
{"Content", "Extension", "Date accessed", "Date modified",
"Date created", "Attributes", "Folder Path", "Name"}
)
in
BezZbędnych
Co się dzieje w każdym kroku?
| Krok | Funkcja M | Co robi |
|---|---|---|
| 1 | Folder.Files(...) | Skanuje folder i zwraca tabelę z metadanymi każdego pliku |
| 2 | Table.SelectRows(...) | Odrzuca pliki PDF, Word, JPG – zostawia tylko Excel |
| 3 | Text.BeforeDelimiter(...) | Wycina nazwę pliku bez rozszerzenia .xlsx |
| 4 | Excel.Workbook(...) | Otwiera plik binarny i pokazuje jego arkusze |
| 5 | Źródło{0}[Data] | Pobiera pierwszy arkusz z pliku |
| 6 | Table.PromoteHeaders(...) | Zamienia pierwszy wiersz danych na nazwy kolumn |
| 7 | Table.ExpandTableColumn(...) | Rozwija wszystkie małe tabele w jedną dużą |
| 8 | Table.RemoveColumns(...) | Czyści zbędne kolumny systemowe |
Warianty kodu M – dopasuj rozwiązanie do siebie
A) Wczytywanie konkretnego arkusza (nie pierwszego z brzegu)
Zamień linię PierwszyArkusz = Źródło{0}[Data] na jedną z poniższych:
// Wersja A: arkusz o dokładnej nazwie
WybranyArkusz = Table.SelectRows(Źródło, each [Name] = "Dane")[Data]{0},
// Wersja B: arkusz, którego nazwa zaczyna się od "Raport"
WybranyArkusz = Table.SelectRows(Źródło, each Text.StartsWith([Name], "Raport"))[Data]{0},
B) Filtrowanie plików po nazwie (np. tylko pliki zaczynające się od „Raport_”)
Dodaj ten krok między filtrowaniem po rozszerzeniu a dodawaniem kolumny z nazwą pliku:
TylkoRaporty = Table.SelectRows(
TylkoExcel,
each Text.StartsWith([Name], "Raport_")
),
C) Zachowanie ścieżki folderu jako osobnej kolumny
Zamiast usuwać Folder Path w ostatnim kroku, dodaj go jako kolumnę wcześniej:
ZeŚcieżką = Table.AddColumn(ZNazwąPliku, "Ścieżka", each [Folder Path], type text),

