---
title: "Jak na uživatelské funkce v Google Sheets (příklad funkce encodeURI)"
id: "183"
type: "post"
slug: "jak-na-uzivatelske-funkce-v-google-sheets-priklad-funkce-encodeuri"
published_at: "2015-07-24T13:18:26+00:00"
modified_at: "2023-08-13T15:30:56+00:00"
url: "https://www.kapler.cz/jak-na-uzivatelske-funkce-v-google-sheets-priklad-funkce-encodeuri/"
markdown_url: "https://www.kapler.cz/jak-na-uzivatelske-funkce-v-google-sheets-priklad-funkce-encodeuri.md"
excerpt: "Už jsem tu psal o vlastních funkcích/vzorcích pro MS Excel, které se od standardních VBA maker (subrutin) liší použitím Function namísto Sub a tím, že návratovou hodnotou je automaticky proměnná uvntiř této funkce, která se jmenuje stejně jako název funkce...."
taxonomy_category:
  - "Programování"
taxonomy_post_tag:
  - "funkce"
  - "Google Apps Script"
  - "Google Sheets"
  - "VBA"
---

# Jak na uživatelské funkce v Google Sheets (příklad funkce encodeURI)

Už jsem tu psal o vlastních funkcích/vzorcích pro MS Excel, které se od standardních VBA maker (subrutin) liší použitím Function namísto Sub a tím, že návratovou hodnotou je automaticky proměnná uvntiř této funkce, která se jmenuje stejně jako název funkce. Uživatelské vzorce v Google Sheets se od ostatních funkcí neliší vlastně vůbec v ničem, jsou…

Uveřejněno

24. 7. 2015

Rubrika

[Programování](https://www.kapler.cz/category/programovani/)

Autor

Tomáš Kapler

Značky:

[funkce](https://www.kapler.cz/tag/funkce/)
, [Google Apps Script](https://www.kapler.cz/tag/google-apps-script/)
, [Google Sheets](https://www.kapler.cz/tag/google-sheets/)
, [VBA](https://www.kapler.cz/tag/vba/)

Už jsem tu [psal](/tag/funkce)
o vlastních funkcích/vzorcích pro MS Excel, které se od standardních VBA maker (subrutin) liší použitím Function namísto Sub a tím, že návratovou hodnotou je automaticky proměnná uvntiř této funkce, která se jmenuje stejně jako název funkce.

Uživatelské vzorce v Google Sheets se od ostatních funkcí neliší vlastně vůbec v ničem, jsou to prostě normální Google Apps Script (v podstatě Javascript) funkce a návratová hodnota se prostě řeší standardním returnem. Snadno jim lze také vytvořit nápovědu pomocí standardního JSDoc.

Bohužel většina funkcí, které někdo vytvářel a někde zveřejnil není psána správně, typickým problémem je kromě absence nápovědy také to, že nepočítají, že by někdo danou funkci použil na nějaké pole prvků a že by návratovou hodnotou také mohlo být pole prvků.

Vše ukážu na jednoduchém příkladu standardní Javascript funkce [encodeURI](http://www.w3schools.com/jsref/jsref_encodeuri.asp)
, když byste ji chtěli použít ve vzroci v Google Sheets. Jděte do Nástroje / Editor skriptů a vložte:

```
/**
* Encodes special characters, except: , / ? : @ & = + $ # (Use encodeURIComponent() to encode these characters)
* http://www.w3schools.com/jsref/jsref_encodeuri.asp
 *
* @param {string|Array} input The text or range of cells to be encoded.
* @return Encoded input.
* @customfunction
 */
function ENCODEURI(input) {
 if (input.map) { // Test whether input is an array.
 return input.map(ENCODEURI); // Recurse over array if so.
 } else {
 return encodeURI(input.toString() );
 }
}
```

- Na začátku je JSDoc dokumentace, která se pak objeví v bublině, když budete funkci používat. Prvních 40 znaků je vidět už v přehledu funkcí. Nepovinná, ale velmi doporučuji
- @param vysvětluje, jaké parametry se očekávají na vstupu. V tomto případě jeden parametr input, který může být buď string a nebo Array. Také je vidět v nápovědě
- v @return si můžete poznačit, co očekáváte na výstupu, ale nikde to vidět není
- @customfunction říká Google Sheets, že se jedná o uživatelskou funkci a že ji má nabízet mezi funkcemi.
- Následuje samotná funkce v Google Apps Script / Javascriptu. Není povinné, aby byla psaná velkými písmeny, jen jsou tak psané všechny build-in funkce, tak je fajn to ctít. Tady ve script editoru jsou funkce case sensitive, v Google Sheets nikoliv, takže tam pak klidně můžete použít =encodeURI(string) jako používáte někde na webu.
- Pak je zde jednoduchý rekurzivní hack, který využije Javascript funkci map, která zavolá vybranou funkci na každý prvek pole – v tomto případě tedy rekurzivně zavolá sebe sama.
- A když se o pole nejedná, tak funkce převede hodnotu na string, převede jí přes Javascript funkci encodeURI a vrátí jí zpět do Google Sheets.
- Pozor, kdybych chtěl pojmenovat funkci malými písmeny, tedy encodeURI, shodně jako je ta Javascript funkce, kterou zde volám, tak místo ní zavolá opět sebe sama a funkce se zacyklí.

Výsledek vidíte na obrázku. Všimněte si, že jsem vzorec napsal opět jen do jedné buňky, a to ve formátu B1:B, takže se propíše na všechny řádky.

## Komentáře

### Jedna odpověď na „Jak na uživatelské funkce v Google Sheets (příklad funkce encodeURI)“

1. [Sitemap.XML do Google Sheets pomocí Apps Script – Kapler's](https://kapler.cz/sitemap-xml-do-google-sheets-pomoci-apps-script/) [26. 8. 2019](https://www.kapler.cz/jak-na-uzivatelske-funkce-v-google-sheets-priklad-funkce-encodeuri/#comment-21736) […] Kód je myslím vševysvětlující, pro začátečníky doporučuji svůj starší článek Jak na uživatelské funkce v Google Sheets. […]
