Automatizace · Finance a dokumenty
Hromadné generování dokumentů z Excelu: smlouvy z Google Docs
Jak z tabulky v Excelu nebo Google Sheets vyrobit desítky smluv z jedné šablony v Google Docs. Šablona, data, skript v Apps Scriptu, limity a podpis.
Tomáš Andrlík Publikováno
Hromadné generování dokumentů z Excelu funguje tak, že z jednoho řádku tabulky vznikne jeden hotový dokument. Šablonu smlouvy připravíte v Google Docs se zástupnými poli typu {{jmeno}}, data nahrajete do Google Sheets a krátký skript v Apps Scriptu pro každý řádek zkopíruje šablonu, pole nahradí hodnotami a uloží PDF. Bez programování to zvládne i hromadná korespondence ve Wordu. Její výstup ale podle nápovědy Microsoftu míří na tisk nebo e-maily [1].
Níže je postup pro smlouvy, dohody, dodatky i předávací protokoly. Najdete tu ukázkový skript, limity, na které narazíte u stovek dokumentů, a jednu věc, kterou generování neřeší: podpis.
Kterou cestu zvolit: Word, Google Docs se skriptem, nebo API?
| Word + Excel (hromadná korespondence) | Google Docs + Sheets + Apps Script | Docs API z aplikace nebo integrační platformy | |
|---|---|---|---|
| Kdy se hodí | Dopisy, obálky, občasná dávka | Smlouvy, které mají skončit jako samostatné soubory v jedné složce | Generování z CRM, e-shopu nebo formuláře, bez otevírání tabulky |
| Co je potřeba | Word a Excel | Google účet, šablona, tabulka, krátký skript | Vývojář nebo konektor s přístupem k API |
| Výstup | Tisk dokumentů nebo e-maily [1] | Google Doc a PDF za každý řádek, odkaz zpět v tabulce | Kopie šablony s nahrazenými poli [3] |
Pro smlouvy dál popisujeme prostřední cestu. Nepotřebuje další program a skript je připojený přímo k tabulce s daty [8].
Jak připravit šablonu smlouvy v Google Docs?
- Začněte od schváleného textu. Obsah smlouvy dodá váš advokát, nebo už ho máte ověřený. Generování mění jen pole, právní text zůstává stejný.
- Proměnné nahraďte značkami. Jméno, adresa, datum nástupu, cena: každá hodnota dostane značku ve dvojitých složených závorkách, třeba
{{jmeno}}nebo{{datum_nastupu}}. Google radí volit řetězce, které se v běžném textu nevyskytují [3]. - Pojmenujte pole stejně jako sloupce tabulky. Bez mezer a speciálních znaků, jen písmena, číslice a podtržítko. Skript hledá značky jako regulární výraz s omezenou syntaxí (knihovna RE2) [4]. Tečka, závorka nebo hvězdička mají v regulárním výrazu zvláštní význam, skript by pak značku nemusel najít, nebo by nahradil něco jiného.
- Značku naformátujte tak, jak má vypadat hodnota. Tučná značka dá tučné jméno. Že se formátování při nahrazení zachová, uvádí Google u Docs API [3]. Na první testovací smlouvě si to ověřte i u svého skriptu.
- Hlídejte záhlaví, zápatí a karty. Ukázkový skript níže nahrazuje pole v těle dokumentu, a to v těle první karty. Záhlaví a zápatí jsou v Apps Scriptu samostatné sekce [5]. Pole tam a na dalších kartách je potřeba nahradit zvlášť.
- Šablonu zamkněte. Upravuje ji jeden člověk, ostatní z ní jen generují. Do názvu nebo patičky dejte verzi, ať u každé smlouvy víte, ze kterého znění vznikla.
Seznamy s proměnlivým počtem řádků, třeba položky nebo harmonogram, jsou složitější. Docs API na ně má vkládání řádků tabulky nebo celé tabulky [3]. Pro první verzi je jednodušší pevný počet řádků přímo v šabloně.
Jak připravit tabulku s daty z Excelu?
- Jeden řádek = jeden dokument. První řádek drží názvy polí, stejné jako značky v šabloně.
- Excel nahrajte do Google Sheets přes Soubor → Importovat. Sheets načtou mimo jiné soubory .xlsx a .xls. Soubor nesmí být chráněný heslem [6].
- Data a částky naformátujte už v tabulce. Skript umí číst buď surové hodnoty, nebo to, co vidíte na obrazovce. Surové hodnoty vracejí datum jako objekt Date [7] a ve smlouvě by z něj byl dlouhý technický zápis. Zobrazené hodnoty jsou text včetně formátu data, času a měny [7]. Ukázkový skript proto čte zobrazené hodnoty a datum se do smlouvy dostane přesně tak, jak ho máte v buňce.
- Přidejte sloupec
odkaz_pdf. Skript do něj zapíše odkaz na hotové PDF. Prázdná buňka znamená, že dokument ještě nevznikl. - Zkontrolujte povinná pole. Prázdnou buňku skript dostane jako prázdný text [7], chybu tedy neohlásí. Ve smlouvě pak zůstane prázdné místo.
Jak napsat skript v Apps Scriptu krok za krokem?
- V tabulce otevřete Rozšíření → Apps Script. Skript bude připojený přímo k tabulce [8].
- Vložte kód níže. Doplňte ID šablony, tedy část adresy dokumentu mezi
/d/a/edit[9], a ID složky, kam se mají smlouvy ukládat. - List s daty pojmenujte
Data. - Spusťte funkci
vygenerujSmlouvya potvrďte skriptu přístup k Tabulkám, Dokumentům a Disku. - Nejdřív to zkuste na dvou třech řádcích a výsledná PDF si přečtěte celá. Teprve potom pusťte celý seznam.
// Za každý řádek listu „Data“ vytvoří Google Doc a PDF ze šablony.
// 1. řádek = názvy polí, stejné jako značky v šabloně ({{jmeno}}, {{datum_nastupu}}…).
// Sloupec „odkaz_pdf“ musí v tabulce existovat, skript do něj zapisuje odkazy.
const SABLONA_ID = 'sem-vlozte-id-sablony';
const SLOZKA_ID = 'sem-vlozte-id-cilove-slozky';
function vygenerujSmlouvy() {
const list = SpreadsheetApp.getActiveSpreadsheet().getSheetByName('Data');
const radky = list.getDataRange().getDisplayValues(); // texty, jak je vidíte v tabulce
const pole = radky.shift(); // první řádek = názvy polí
const sloupecPdf = pole.indexOf('odkaz_pdf');
const sablona = DriveApp.getFileById(SABLONA_ID);
const slozka = DriveApp.getFolderById(SLOZKA_ID);
radky.forEach((radek, i) => {
if (radek[sloupecPdf]) return; // hotové řádky přeskočí
const kopie = sablona.makeCopy('Smlouva - ' + radek[0], slozka);
const doc = DocumentApp.openById(kopie.getId());
const telo = doc.getBody();
pole.forEach((nazev, j) => {
telo.replaceText('\\{\\{' + nazev + '\\}\\}', radek[j]);
});
doc.saveAndClose();
const pdf = slozka.createFile(kopie.getAs('application/pdf'));
list.getRange(i + 2, sloupecPdf + 1).setValue(pdf.getUrl());
});
}
Skript pro každý řádek bez odkazu zkopíruje šablonu do cílové složky, v kopii nahradí všechny značky hodnotami z řádku, kopii uloží, převede ji do PDF a odkaz zapíše zpět do tabulky [4][5][10]. Ve složce tak za každý řádek najdete Google Doc i PDF. Název souboru se bere z prvního sloupce, proto tam dejte jméno nebo číslo smlouvy.
Kde hromadné generování naráží na limity?
| Limit | Hodnota | Co s tím |
|---|---|---|
| Doba běhu skriptu | 6 minut na jedno spuštění [2] | Skript přeskakuje hotové řádky. Když nedoběhne, spusťte ho znovu. Poslední rozpracovaný řádek zkontrolujte, ať ve složce nezůstala kopie navíc. |
| Vytvořené dokumenty | 250 denně u bezplatného účtu Google (gmail.com), 1 500 denně u Google Workspace [2] | Sezónní dávka desítek smluv se do toho vejde. Stovky denně rozdělte do víc dní nebo řešte přes API. |
| Spouštění časovačem | celkem 90 minut denně u bezplatného účtu Google, 6 hodin u Google Workspace [2] | Týká se automatického spouštění, například každou noc. |
| Změny kvót | Google je může kdykoli změnit bez upozornění [2] | Před ostrou dávkou si aktuální hodnoty ověřte. |
Dvě věci nesouvisí s kvótami, a přesto rozhodují:
- Osobní údaje. Smlouvy obsahují jména, adresy a další osobní údaje. Hotová PDF nesdílejte stylem „kdokoli s odkazem“. Přístup ke složce dejte jen lidem, kteří ho potřebují.
- Kontrola člověkem. Skript nepozná překlep ve sloupci s cenou. První dokumenty z každé dávky si někdo přečte celé.
Je vygenerovaná smlouva platná a jak ji podepsat?
Vygenerováním smlouva ještě nevzniká. Když ji uzavíráte písemně, občanský zákoník vyžaduje podpis jednajícího (§ 561 odst. 1). Písemná forma je zachovaná i při jednání elektronickými prostředky, které umožní zachytit obsah a určit, kdo jedná (§ 562 odst. 1). Jak písemnost podepsat elektronicky, nechává zákoník na jiném předpisu [11].
Jak se smlouvou z generátoru naložit:
- Vytisknout a podepsat. PDF je připravené k tisku.
- Podepsat elektronicky přímo v Google. Elektronický podpis v Dokumentech a na Disku je k dispozici v tarifu Google Workspace Individual pro jednotlivce a ve vybraných firemních tarifech Google Workspace (mimo jiné Business Standard, Business Plus a Enterprise), kde ho musí zapnout administrátor. Běžný bezplatný účet Google mezi nimi uvedený není. Po podpisu všemi stranami vznikne PDF se stránkou protokolu auditu [12].
- Poslat do podpisové služby, kterou už používáte, a podepsané PDF uložit vedle vygenerovaného.
Pracovní smlouvy a dohody mají pravidla navíc. Když DPP, DPČ nebo pracovní smlouvu uzavíráte elektronicky, musí zaměstnavatel poslat vyhotovení na e-mail zaměstnance, který zaměstnavatel nemá v dispozici a který mu zaměstnanec písemně sdělil. Zaměstnanec pak může písemně odstoupit nejpozději do 7 dnů ode dne, kdy mu vyhotovení přišlo, a jen dokud nezačal pracovat (§ 21 zákoníku práce) [13]. Jak na to v praxi, popisujeme na stránce Elektronická DPP.
Nejde o právní radu. U konkrétního případu se obraťte na advokáta.
Kdy hromadné generování nepotřebujete?
- Píšete pár smluv měsíčně a každá je jiná. Ruční kopie šablony je rychlejší než ladit skript.
- Rozesíláte dopisy nebo obálky. Hromadná korespondence ve Wordu na to stačí a bez programování [1].
- Smlouvy už vznikají v programu, který máte, a ten má vlastní šablony dokumentů. Nejdřív zkuste ty.
Generování se vyplatí, když stejný typ dokumentu děláte v dávkách: sezónní nábor brigádníků, rámcové smlouvy s odběrateli, dodatky ke změně ceny nebo předávací protokoly.
Jak to děláme u nás
Smlouvy pro brigádníky generujeme stejně jako v postupu výše: schválená šablona v Google Docs, pole doplněná skriptem v Apps Scriptu a převod do PDF. Údaje ale nepřicházejí z řádku tabulky, nýbrž ze vstupního formuláře, a pro mladistvé se použije jiná varianta smlouvy.
Zdroje
- Microsoft Support – Mail merge using an Excel spreadsheet: příprava dat (názvy sloupců, první list, formát procent, měn a PSČ), dokončení sloučení tiskem nebo e-maily. https://support.microsoft.com/en-us/office/mail-merge-using-an-excel-spreadsheet-858c7d7f-5cc0-4ba1-9a7b-0a948fa3d7d3
- Google for Developers – Quotas for Google Services (Apps Script): doba běhu 6 minut, vytvořené dokumenty denně, časovače, změny bez upozornění. https://developers.google.com/apps-script/guides/services/quotas
- Google for Developers – Merge text into a document (Docs API): značky v šabloně, kopie přes Drive API, ReplaceAllTextRequest, zachování formátu, tabulky s proměnlivým počtem řádků, přihlášení koncového uživatele. https://developers.google.com/workspace/docs/api/how-tos/merge
- Google for Developers – Apps Script, Class Body: replaceText a regulární výrazy RE2. https://developers.google.com/apps-script/reference/document/body
- Google for Developers – Apps Script, Class Document: tělo první karty, záhlaví a zápatí jako samostatné sekce, saveAndClose. https://developers.google.com/apps-script/reference/document/document
- Nápověda Editory Dokumentů Google – Import datových sad a tabulek. https://support.google.com/docs/answer/40608?hl=cs
- Google for Developers – Apps Script, Class Range: getValues a getDisplayValues. https://developers.google.com/apps-script/reference/spreadsheet/range
- Google for Developers – Container-bound scripts (skript připojený k tabulce). https://developers.google.com/apps-script/guides/bound
- Google for Developers – Structure of a Google Docs document: ID dokumentu z adresy. https://developers.google.com/workspace/docs/api/concepts/document
- Google for Developers – Apps Script, Class File: makeCopy a getAs (PDF). https://developers.google.com/apps-script/reference/drive/file
- Zákon č. 89/2012 Sb., občanský zákoník, § 561 a 562 (znění od 1. 1. 2026). https://www.zakonyprolidi.cz/cs/2012-89/zneni-20260101
- Nápověda Editory Dokumentů Google – Odesílání žádostí o podpis a podepisování dokumentů pomocí elektronického podpisu. https://support.google.com/docs/answer/12315692?hl=cs
- Zákon č. 262/2006 Sb., zákoník práce, § 21 (znění od 1. 11. 2026). https://www.zakonyprolidi.cz/cs/2006-262
Generování ze šablon je jeden modul automatizace dokumentů. Co všechno zahrnuje, od zdroje dat po uložení podepsané smlouvy, najdete na stránce Generování smluv ze šablon. Evidenci smluv a hlídání termínů řeší stránka Správa dokumentů a smluv. Chcete vědět, jestli se generování vyplatí u vašich smluv? Domluvte si audit zdarma na 30 minut. Projdeme, odkud berete data, kolik dokumentů měsíčně vzniká a kde se dnes přepisují. Řekneme vám i to, kdy stačí Word a ruční kopie.
Související služba
Generování smluv
Smlouva ze šablony od advokáta, s údaji z formuláře, CRM nebo účetního programu, jako hotové PDF.
Více o služběAudit zdarma · 30 minut
Napište nám, co řešíte, a ozveme se do 1 pracovního dne. Začínáme auditem zdarma na 30 minut.