Ve spolupráci se SEDUO jsem vytvořil několik videokurzů:
Jak načítat data ze složky využitím nástroje Power Query bez nutnosti mít pomocné složky atd. aneb jak si načítání ze složky zpřehlednit.
Navíc se dozvíte jak z načítaných sešitů načíst list podle jména, nebo podle pořadí (ať se nenačítá pouze první).
Pokud chcete načítat data ze složky pouhým nakliknutím, více info v článku zde.
V tomto článku se podíváte, jak elegantně načítat data ze složky využitím nástroje Power Query, bez pomocných dotazů (Query), které se objeví pokud používáte pouze klikání na menu.
Nemusíte se strachovat většina věcí se provede klikáním, jen se něco málo úprav v M-kódu. Předvedu dvě možností jak provést:
Pro přehlednost je článek rozdělen na jednotlivé kapitoly, ať případně mohu doplnit, vylepšit:
Pro vyzkoušení je potřeba mít v příslušné složce (adresáři) excelovské sešity, které chcete načíst (pro jednoduchost všechny, ale v závěru se dozvíte, že se dají načíst i některé). Sešity mohou mít i více listů:
Pro testování si připravte sešity do požadovaného adresáře, pro ukázky mám k dispozici disk E: a adresář Data.
Ať nemusíte vytvářet sami můžete si ukázkové soubory stáhnout.
Soubory uložte do vámi vybrané (vytvořené) složky. Případně si pak vygenerujte další měsíce...
Soubory ve složce (adresáři) máte, teď jen složku načíst. Pokud máte spuštěný Excel, stačí z menu Data > Načíst data > Ze souboru > Ze složky
V dialogovém okně vyberete složku a klik na Transformovat data
Dotaz v Power Query můžete vhodně pojmenovat, případně ponechat jako já Data ;)
Potřebujete přidat nový sloupec, který načte tabulky z jednotlivých listů. Tj. na pásu karet Přidání sloupce > Vlastní sloupec.
Nový název sloupce můžete nechat a vlastní vzorec sloupce vyplníte na základě potřeb:
Excel.Workbook([Content])
Excel.Workbook([Content]){[Item="List1"]}[Data]
proto si pojistíme ať jde skutečně o list (Sheet)
Excel.Workbook([Content]){[Item="List1",Kind="Sheet"]}[Data]
Excel.Workbook([Content]){0}[Data]
Já potřebuji načíst listy, které se jmenuji List1 tak proto použiji:
Excel.Workbook([Content]){[Item="List1"]}[Data]
Protože informace v ostatních sloupcích, kromě posledního nepotřebuji, tak je odstraním, nad posledním sloupcem, pravý klid a Odebrat ostatní sloupce.
Následně již stačí "rozkliknout" u "dvojšipku" a vybrat, které sloupce chcete získat, já chci všechny, proto nechám všechny zaškrtnuty a klik na OK a máte téměř hotovo.
Jen ze všech tabulek se načetli všechny data (včetně názvu záhlaví). Tj. protože bylo ponecháno v dialogovém okně "Používat původní název jako předponu" což nechcete. Proto doporučuji raději odškrtnout!
Proto zbývá pár uprav. První řádek jako záhlaví a odstranit (odfiltrovat) název záhlaví, který v datech nepotřebujete. Tyto úpravy již nechám na vás.
Není výsledek lepší a přehlednější než přes spoustu dalších pomocných Query (dotazů)?
Druhou možností je využít pomocné funkce, kdy budete mít funkci a jeden dotaz (Query). Připravíme si pomocnou funkci, která nám bude jednotlivé soubory načítat.
Proto si klasicky načtete excelovský soubor (třeba pro leden). Jak načítat soubory z Excelu jsem sepsal:
Proto budu předpokládat, že soubor Leden-mzdy.xlsx máte načten a načítáte list pod názvem List1.
Teď jen z dotazu vytvoříte funkci. V menu Domů > Rozšířený editor, kdy se vám zobrazí dialogové okno, které bude obsahovat nějaký kód.
Toto kódu se neděste a nebojte, to že vypadá jinak než na ukázce nevadí. Důležité je že kód určitě začíná let a končí nějakým řádkem za slovem in:
let
Zdroj = Excel.Workbook(File.Contents("E:\Data\Leden-mzdy.xlsx"), null, true),
List1_Sheet = Zdroj{[Item="List1",Kind="Sheet"]}[Data],
#"Záhlaví se zvýšenou úrovní" = Table.PromoteHeaders(List1_Sheet, [PromoteAllScalars=true]),
#"Změněný typ" = Table.TransformColumnTypes(#"Záhlaví se zvýšenou úrovní",{{"Jméno", type text}, {"Plat", Int64.Type}, {"List", type text}, {"Soubor", type text}})
in
#"Změněný typ"
Vám stačí doplnit před let řádek s názvem a parametry funkce:
let NactiSoubory=(Path,Name) =>
Na konec doplnit uzavření funkce:
in NactiSoubory
A upravit cestu z
Zdroj = Excel.Workbook(File.Contents("E:\Data\Leden-mzdy.xlsx"), null, true),
na
Zdroj = Excel.Workbook(Path & Name), null, true),
V mém případě vypadá takto: Ve vašem případě může být střed jiný, což na funkci nebude mít vliv:
let NactiSoubory=(Path,Name) =>
let
Zdroj = Excel.Workbook(File.Contents(Path & Name), null, true),
List1_Sheet = Zdroj{[Item="List1",Kind="Sheet"]}[Data],
#"Záhlaví se zvýšenou úrovní" = Table.PromoteHeaders(List1_Sheet, [PromoteAllScalars=true]),
#"Změněný typ" = Table.TransformColumnTypes(#"Záhlaví se zvýšenou úrovní",{{"Jméno", type text}, {"Plat", Int64.Type}, {"List", type text}, {"Soubor", type text}})
in
#"Změněný typ"
in NactiSoubory
Navíc můžete zkontrolovat, že dole je zelená "fajfka", že kód je napsán správně. Pokud ne zkontrolujte, zda máte správně písmenka a nic vám neschází a nepřebývá.
Klik na Hotovo a změní se Dotaz (Query) na funkci.
Teď je vhodné funkci přejmenovat. Dvojklik a pojmenujeme "Nacteni"
Máme připraveno na načítání...
Stejně jako v předchozím případě načteme složku ze které potřebujete získávat data.
Pokud máte spuštěný Excel, stačí z menu Data > Načíst data > Ze souboru > Ze složky, pokud jste v Power Query tak Domů > Nový zdroj > Soubor > Složka
V dialogovém okně vyberete složku a klik na Transformovat data
Dotaz v Power Query můžete vhodně pojmenovat, případně ponechat jako já Data, nebo Data (2) pokud zkoušíte obě varianty v jednom sešitě ;)
Potřebujete přidat nový sloupec, který načte tabulky z jednotlivých listů. Tj. na pásu karet Přidání sloupce > Vlastní sloupec.
V dialogovém okně Nový název klidně ponechte Vlastní, a Vlastní vzorec vložte:
Nacteni([Folder Path],[Name])
Kde:
Odstraníte ostatní sloupce a ponechte jen poslední "Vlastní".
Klik na "dvojšipku".
Klik na OK a máte hotovo.
V přípravě.
Možná vás bude ještě zajímat:
Soubor ke stažení zdarma je v přípravě. Podpořit zveřejnění můžete podporou na Patreon.
Narazili jste na nějaké problémy, máte tip na vylepšení nebo doplnění článku, můžete se zmínit v komentářích.
Článek byl aktualizován: 13.06.2023 22:01
Ušetřil vám tento web čas, peníze? Pomohl vyřešit problém? Jste ochotni poskytnout symbolickou odměnu na další rozvoj? Vybrte si formu odměny, která vám vyhovuje.
Microsoft Office (Word, Excel, Google tabulky, PowerPoint) se věnuji od roku 2000 (od 2004 na této doméně) - V roce 2017 jsem od Microsoft získal prestižní ocenění MVP (zatím jsem jediný z ČR v kategorií Excel). Své vědomosti a zkušenosti dávám k dispozici i on-line ve videích pro SEDUO. Ve firmách školím a konzultuji, učím na MUNI. Tento web již tvořím přes 15 let. Zdarma je zde přes 1.000 návodu, tipů a triků, včetně přes 250 různých šablon, sešitů.
Můžete být prvními co zanechají smysluplný komentář.
Pomohl Vám návod? Sdílejte na Facebooku, G+ |
||
LinkedIn... |
Stránky o MS Office (Excel) produktu společnosti Microsoft. Neslouží jako technická podpora.
| Email na autora: pavel.lasak@gmail.com | Copyright © : Pavel Lasák 2004 - 2025 |