Lekce 2 — Google Apps Script — První spuštění funkce

Jan Hora
AppSatori
Published in
6 min readOct 17, 2019

V první lekci, jsme se seznámili s úplnými základy Google Apps Scriptu, napsali jsme si naši první funkci a dnes si ukážeme, jak lze funkci spustit 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. Pokud máte Gmail účet bude okno vypadat trochu jinak, nebudete volit účet z domény, ale princip je stejný, je třeba vybrat, pod kterým z účtů povolíte běh skriptu. I dál se průběh autorizace liší podle toho, jestli jste na firemním účtu, nebo používáte Gmail verzi.

U Gmail účtu 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. Na firemním účtu následující obrazovka není.

Zobrazuje se pouze na Gmail účtu.

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:

Zobrazuje se pouze na Gmail účtu.

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. Tato obrazovka se objeví jak uživatelům Gmailu tak na firemních účtech.

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á G 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 a nezná jejich ID aby je mohl otevřít přímo.
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, později si ukážeme 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 v tabulce 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 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();
var akt_bunka = akt_list.getCurrentCell();
var txt = akt_bunka.getValue();
akt_bunka.setBackground( ‘red’ );
}

Apps Script může v Tabulkách, Dokumentech, Prozentací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 s názvem Obarvi buň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()? Pokud funkce s tímto názvem existuje, automaticky se spustí 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 příští lekci si povíme něco o jednoduchých a instalovaných spouštěčích.

--

--