Lekce 2 - Google Apps Script - První spuštění funkce
V předchozí lekci, Úvod do Google Apps Script, jsme se seznámili s úplnými základy Google Apps Scriptu a napsali jsme si naši první funkci.
Dnes si ukážeme, jak lze spustit funkci v Google Apps Scriptu a co budeme muset udělat, než se poprvé opravdu spustí.
Spuštění funkce
Spustit funkci lze několika způsoby, my si ji teď spustíme tak říkajíc z ruky.
Menu
Jednou možností je přes menu, kde vybereme Spustit - Spustit funkci - myFunction tak, jak to vidíte na následujícím obrázku:
Ve chvíli, kdy bychom měli funkcí více, vybrali bychom jednu z nich ze seznamu.
Spustit nebo ladit
Druhý způsob je o něco rychlejší, vybereme funkci ze seznamu (my máme jen jednu, takže je přímo vybraná) a klikneme na ikonu spustit nebo ladit:
Při spuštění se funkce provede, při ladění máme možnost její běh zastavit a krokovat. To si ukážeme později. Hodí se nám to zejména v případech, kdy funkce nefunguje správně a hledáme příčinu.
Vyberte si jeden ze způsobů a funkci spusťte. Výsledkem je následující varování:
Co to znamená? Skript, který jsme právě napsali a chceme jej spustit, bude provádět nějaké změny ve vaší tabulce. V tomto případě jen číst hodnotu z buňky a nastavovat její barvu, ale mohl by provádět cokoliv jiného, mazat data, vyhledávat konkrétní údaje a měnit je na jiné a podobně. Proto než se skript poprvé spustí, musíme to povolit.
Oprávnění
Klikněte proto na Zkontrolovat oprávnění. Objeví se další panel, kde vyberete účet, pro který chcete běh funkce povolit. Možná máte jen jeden účet, nicméně je možné, že jich máte několik a běh funkce chcete povolit pro jiný, než ke kterému jste aktuálně přihlášeni.
Ještě to nekončí, následuje další panel, kde vás Google poučí, že tato aplikace není ověřená. S trochou ironie by se dalo poznamenat, že ji těžko mohl kdokoliv ověřit, když jsme si ji právě teď napsali.
Nicméně Google klade na bezpečí uživatelů velký důraz, takže stejným způsobem varuje u všech skriptů. Nezbývá, než se s tím smířit a těch několik kliknutí navíc udělat.
Zpět do bezpečí nechceme, potřebujeme vyzkoušet funkci, kterou jsme vytvořili, proto klikneme vlevo na odkaz Rozšířené možnosti. Panel se mírně změní, dole se objeví možnost pokročit dál:
Protože máte pro strach uděláno, klikněte na odkaz Přejít na web první skript (nebezpečné). Objeví se další panel, tentokrát s přehledem práv, která skriptu povolíte:
Dobře si přečtěte, co skriptu povolujete. Ano, opravdu, jakmile kliknete na Povolit, bude skript mít právo dělat s vašimi tabulkami a jejich daty prakticky cokoliv. A to se všemi tabulkami na vašem Disku, nebo i s tabulkami, které s vámi někdo sdílí. Takže varování Google neberte na lehkou váhu, hlavně v případě, že budete zkoušet skripty nalezené někde na webu a nebudete si úplně jistí, co přesně dělají.
Kdo používá Suite déle, asi namítne, že v tomto konkrétním případě skript nemůže do ostatních tabulek zasáhnout. Jednoduše proto, že nemá jak by je našel, nemá totiž práva hledat na vašem Disku. Je to samozřejmě pravda, nicméně při přidělování práv cizím skriptům je obezřetnost určitě na místě.
Skriptu přidělená práva lze později samozřejmě zase zrušit, dále si můžeme ukázat jak.
Klikněte tedy na Povolit, panel zmizí a funkce se spustí. Jakmile doběhne, přepněte se do tabulky. Buňka, která je aktuálně vybraná, by měla mít červené pozadí.
Zkuste vybrat jinou buňku a na záložce se skriptem spustit funkci
myFunction()
znovu. Opět by se měla vybraná buňka podbarvit
červeně.
Volání funkce z tabulky
Nyní si ukážeme, jak naši obarvovací funkci zavolat přímo z tabulky.
Nejprve ji přejmenujeme, aby název funkce vyjadřoval co vlastně dělá. Bude teď vypadat takto:
function obarvi_bunku() { var akt_list = SpreadsheetApp.getActiveSheet(); // vybere aktuální list var akt_bunka = akt_list.getCurrentCell(); // vybere aktuálně vybranou buňku var txt = akt_bunka.getValue(); // hodnotu z buňky uloží do proměnné txt akt_bunka.setBackground('red'); // obarví pozadí buňky na červeno }
Apps Script může v Tabulkách, Dokumentech, Prezentacích a Formulářích doplňovat do menu vlastní položky a přiřazovat jim volání funkcí. Naše funkce, která to udělá, může vypadat třeba takto:
function onOpen() { var ui = SpreadsheetApp.getUi(); ui.createMenu('Moje Menu') .addItem('Obarvi buňku', 'obarvi_bunku') .addToUi(); }
Pojďme si kód rozebrat. První řádek:
var ui = SpreadsheetApp.getUi();
získá UI (user interface, čili uživatelské rozhraní) tabulky. Další řádek:
ui.createMenu('Moje Menu');
v tomto UI vytvoří nové menu s názvem Moje Menu. Řádek:
.addItem('Obarvi buňku', 'obarvi_bunku')
do menu doplní novou položku a nastaví jaká funkce se po kliknutí na položku zavolá. A poslední řádek vytvořené menu doplní ke stávajícímu UI, čili se postará o vlastní zobrazení menu.
Možná jsou vám divné řádky začínající tečkou, ale už jsme si říkali, že jednotlivé metody se dají řetězit pomocí tečky. Jde tedy vlastně o zápis:
ui.createMenu('Moje Menu').addItem('Obarvi buňku', 'obarvi_bunku').addToUi();
jen přehledněji zapsaný. Pokud bychom řetězení pomocí tečky nevyužili, museli bychom funkci zapsat takto:
function onOpen() { var ui = SpreadsheetApp.getUi(); var menu = ui.createMenu('Moje Menu'); menu.addItem('Obarvi buňku', 'obarvi_bunku'); menu.addToUi(); }
A proč jsme celou funkci nazvali zrovna onOpen()
? Funkce s
tímto názvem se automaticky volá při otevření tabulky. Pokud bychom ji
nazvali jinak, museli bychom její automatické spuštění nastavit pomocí
takzvaných spouštěčů (triggerů), o kterých si řekneme na jiném
místě.
Zkuste se přepnout do tabulky a znovu ji načíst. Pokud jste ve funkcích
neudělali chybu, měli byste v menu za Nápověda vidět novou položku
Moje menu. Vyberte v tabulce některou buňku a z menu zvolte
Moje menu - Obarvi buňku. Pokud se barva pozadí aktuální
buňky změnila na červenou, je všechno v pořádku a funkce se provedla. V
případě, že máte ve funkci obarvi_bunku()
nějakou chybu, pak
se buňka neobarví a pravděpodobně se vám ukáže chybové hlášení,
které může vypadat třeba takto:
Tady byl příčinou chyby překlep, kdy jsem na posledním řádku změnil správný zápis
akt_bunka.setBackground('red');
na
akt_banka.setBackground('red');
a skript ohlásil, že proměnnou akt_banka
nezná. Podobná
chyba se najde a odstraní snadno, ale bohužel se při programování dají
udělat chyby mnohem záludnější, které se velmi špatně hledají. Více o
hledání a odstraňování chyb si povíme v nějakém příštím
pokračování.
V další lekci, Google Apps Script - Jednoduché a instalované spouštěče, se budeme věnovat spouštěčům.