V této a dalších dvou lekcích si ukážeme, jak na základě šablony vytvořit nový dokument, doplnit do něj data z Google tabulky a nakonec z dokumentu vyrobit PDF soubor.
Určitě Vás napadne spousta využití. V podstatě se tato funkčnost dá využít pro jakýkoliv případ, kdy potřebujete sestavit personifikované dokumenty a ty poté vytisknout, rozeslat e-mailem nebo nasdílet. Můžete tak třeba každému zaměstnanci nasdílet jeho přehled čerpání dovolené, zákazníkům rozeslat na míru sestavené nabídky apod.
My si nyní ukážeme, jak stejný skript využít pro tisk diplomů na akci pořádané pro děti.
Na akci je několik soutěží, každá soutěž má svého porotce, vše se koná v docela velkém areálu. Body za každou soutěž se sčítají a děti s nejvyšším počtem bodů dostanou nějaké sladkosti a diplom se svým jménem a získaným počtem bodů.
Dá se to samozřejmě vyřešit i s tužkami, notýskem a diplomy vypsat ručně, ale my na to využijeme Google Workspace (dříve G Suite) a ještě se přitom naučíme pár nových věcí.
Jak na to půjdeme a co budeme potřebovat?
děti dostanou startovní čísla aby je porotci nemuseli vyhledávat podle jmen
do Google tabulky si uděláme seznam všech dětí a jejich startovních čísel
každý porotce bude potřebovat telefon (tablet, notebook) a Google účet
tabulku porotcům nasdílíme tak, aby každý mohl zapisovat výsledky jen své disciplíny
připravíme si Google dokument jako šablonu diplomu
napíšeme si skript, který na základě výsledků z tabulky a šablony vyrobí sadu diplomů v PDF
Poté už budeme potřebovat jen notebook a tiskárnu pro tisk diplomů.
Po menší úpravě by se dal skript využít třeba pro online školení. Pokud účastník vyplní test správně, vygeneruje se mu PDF s certifikátem o absolvování školení. Podle situace certifikát uživateli automaticky zašleme e-mailem nebo vytiskneme a osobně předáme.
A jdeme na to, nejprve si připravíme tabulku.
Tabulka pro zápis výsledků
Celou tabulku lze samozřejmě udělat několika způsoby.
Všechny disciplíny můžeme dát na jeden list, což by bylo asi nejjednodušší.
Já jsem pro každou disciplínu použil samostatný list, protože si na tom vysvětlíme několik nových věcí. Další varianta by byla, že každá disciplína by měla samostatnou tabulku.
Co by měly všechny varianty splňovat?
jeden seznam dětí, abychom ho nemuseli upravovat na několika místech
možnost měnit počet bodů pro nárok na diplom
porotce může zapisovat pouze výsledky své disciplíny
Moje tabulka vypadá takto.
Opět je tabulka nasdílena pouze na čtení, takže ji nemůžete upravovat a ke skriptům, které jsou přibaleny k tabulce se nedostanete vůbec.
Pokud si chcete skripty prohlédnout a dál si je upravovat, pak si přes Soubor — Vytvořit kopii uložte kopii tabulky na svůj Disk a dál pracujte se svou kopií.
Jinak, pokud se někdo najde v seznamu dětí, pak je to jen shoda náhod, pro vygenerování jmen jsem použil tuto službu http://www.jmenaprijmeni.cz/generator-jmen-online/1610-generator-ceskych-jmen-a-prijmeni-pro-kluka
Jeden seznam dětí
Seznam dětí je na listu Celkem, na ostatní listy se promítá funkcí IMPORTRANGE, což je běžná funkce dostupná v tabulkách. Funkce má 2 parametry, URL tabulky, ze které data načítáme a rozsah, který chceme načíst.
Přitom URL může být zadané přímo, nebo můžeme uvést adresu buňky, kde se URL nachází, nebo místo něj můžeme uvést funkci, která URL vrátí.
Funkci, která by vracela URL tabulky v seznamu vestavěných funkcí nenajdete, ale to vůbec nevadí, protože si ji prostě napíšeme do editoru skriptů.
Bude vypadat takto.
function get_url(){
return SpreadsheetApp.getActive().getUrl();
}
Vidíte, že je velice jednoduchá, prostě vezme aktivní tabulku (tu, ke které je skript přibalen) a vrátí její URL.
Tím jsme vytvořili takzvanou uživatelskou funkci, kterou jednak můžeme použít kdekoliv ve skriptech, které budeme psát, ale i přímo ve vzorcích v tabulce jako ostatní vestavěné funkce. Zkuste si do libovolné buňky zadat vzorec =get_url(), do buňky by se mělo doplnit URL vaší tabulky, které vidíte nahoře v adresním řádku. My funkci použijeme přímo jako parametr funkce IMPORTRANGE, takže funkce pro import seznamu dětí, kterou zapíšeme do tabulky pak bude mít tvar
=IMPORTRANGE(get_url();"Celkem!A1:B50");
Vzorec si zkopírujeme i na další listy s jednotlivými disciplínami.
Pro ty z Vás, kdo nemáte s funkcemi tabulek zkušenosti drobná poznámka.
Adresa buňky z jiného listu se zapisuje ve tvaru například List!A3, čili název listu, vykřičník a pak adresa buňky. Proto zápis Celkem!A1:B50 znamená oblast A1:B50 z listu Celkem.
Ještě pár poznámek k funkci IMPORTRANGE.
Po zadání vzorce se data hned nenačtou, ale objeví se hláška Musíte tyto listy spojit a tlačítko Povolit přístup. Vypadá to takto.
Po kliknutí na tlačítko se data načtou.
V našem případě sice čteme data pouze z vedlejšího listu stejné tabulky, ale propojení je třeba potvrdit stejně jako kdybychom četli z jiné tabulky.
A jako u všeho dalšího v Google Suite nezáleží na tom komu tabulka ze které data čteme patří, nebo na kterém Disku leží. Jakmile ji máte nasdílenou (stačí právo zobrazit), můžete z ní touto funkcí získat aktuální data.
Funkce před načtením dat kontroluje, zda je oblast kam má data importovat prázdná. Pokud není, objeví se v buňce s funkcí chybová hláška #REF! s poznámkou třeba Výsledek pole nebyl rozšířen, protože by přepsal data v buňce F8.
Funguje to i opačně, pokud už máte data načtená a pak do některé buňky v importované oblasti zkusíte cokoliv zadat, všechna importovaná data zmizí a v buňce obsahující IMPORTRANGE se objeví chyba #REF! opět s poznámkou Výsledek pole nebyl rozšířen, protože by přepsal data v buňce …
Nastavení hranice bodů pro zisk diplomu
Předem nevíme jak jednotlivé disciplíny dopadnou a jaký bude maximální zisk bodů. Mohli bychom tedy diplomy přidělit třeba prvním pěti dětem s nejvyšším počtem bodů.
My použijeme jiný postup, zadáme si do tabulky bodový limit, při jehož překročení získá dítě diplom. Podle toho jak dopadnou součty bodů si nastavíme limit tak, aby diplom a sladkosti vůbec někdo získal a současně aby ho nedostaly všechny děti. Navíc budeme moci diplom vytisknout třeba i pro nejmladšího účastníka bez ohledu na počet bodů a podobně.
Bodový limit je v buňce G1 a skript nám do sloupce D vypíše Ano nebo Ne podle toho zda dítě limit překonalo nebo ne. Diplomy se pak v dalším kroku vygenerují jen dětem, které budou mít ve sloupci Ano. Buňku G1 jsem si pojmenoval limit_diplom a skript pak bude tuto hodnotu hledat podle názvu.
Obecně můžete jakékoliv oblasti nastavit název a ve skriptech nebo vzorcích pak pracovat s názvem místo normálního adresování buněk. Pro pojmenování rozsah buněk nejprve vyberte a v menu zvolte Data — Pojmenované rozsahy a v postranním panelu vpravo nastavíte oblasti název.
Přístup porotce jen ke své disciplíně
Důvod je asi jasný, chceme aby porotce nemohl omylem zapsat body k jiné disciplíně než kterou má na starosti. V tabulkách se to provede tak, že uživateli tabulku nasdílíme a pak nastavíme oblasti, do kterých mu přístup omezíme.
Takže nejprve tabulku nasdílíme účtům jednotlivých porotců, samozřejmě jim musíme nastavit právo do tabulky zapisovat.
Jakmile máte nasdíleno, vyberte list s první disciplínou Běh v pytlích v menu zvolte Nástroje — Chránit list a tlačítko Nastavit oprávnění.
V seznamu účtů, pro které je tabulka sdílená, pak nastavíte přístup k listu jen porotci této disciplíny, ostatním přístup odeberete.
Obdobně nastavte přístup na další listy jednotlivým porotcům.
A samozřejmě nezapomeňte na list Celkem, který byste měli mít dostupný jen vy, všem porotcům proto zrušte možnost list upravovat.
Postupovat se dá i obráceně, na jednotlivých listech nastavit kdo jej může upravovat a sdílení nastavit až poté.
Šablona pro diplom
Pomocí skriptů můžeme dokumenty přímo vytvářet, šablonu bychom tedy nepotřebovali a každý diplom bychom mohli vytvořit pomocí skriptu, ale bylo by to zbytečně pracné.
Jednodušší bude, když si ručně vyrobíme šablonu a budeme do ní jen doplňovat jméno a počet bodů. Jak už jsme zmínili šablona bude normální Google dokument.
Moje šablona vypadá takto, takže zcela určitě zvládnete připravit mnohem hezčí než já.
Co je důležité, v šabloně si označíme místa, kam bude skript doplňovat údaje jednotlivých dětí. Jak si místa označíme je jen na nás, jediný požadavek je, aby se stejný text nevyskytoval v běžném textu šablony. Já jsem si pole označil {jmeno} a {pocet_bodu}, ale třeba _jmeno_ nebo #jmeno# by posloužilo úplně stejně.
Šablonu máme, zkopírujeme si její URL nebo ID jak jsme si ukázali v lekci s kurzy ČNB.
Google dokumenty nenabízí mnoho možností jak se na šabloně graficky vyřádit, přeci jen je to nástroj na psaní dokumentů. Mnohem více možností nabízí Prezentace, kde můžeme lépe umístit obrázky i texty. Pokud bychom jako šablonu použili Prezentaci, bylo by řešení hodně podobné, jen bychom museli náš skript mírně upravit.
Tak a v příští lekci si napíšeme skript na součet bodů za jednotlivé disciplíny.
Comments