Group

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 ScriptDocs API z aplikace nebo integrační platformy
Kdy se hodíDopisy, obálky, občasná dávkaSmlouvy, které mají skončit jako samostatné soubory v jedné složceGenerování z CRM, e-shopu nebo formuláře, bez otevírání tabulky
Co je potřebaWord a ExcelGoogle účet, šablona, tabulka, krátký skriptVývojář nebo konektor s přístupem k API
VýstupTisk dokumentů nebo e-maily [1]Google Doc a PDF za každý řádek, odkaz zpět v tabulceKopie š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?

  1. 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ý.
  2. 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].
  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.
  4. 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.
  5. 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ášť.
  6. Š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?

  1. V tabulce otevřete Rozšíření → Apps Script. Skript bude připojený přímo k tabulce [8].
  2. 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.
  3. List s daty pojmenujte Data.
  4. Spusťte funkci vygenerujSmlouvy a potvrďte skriptu přístup k Tabulkám, Dokumentům a Disku.
  5. 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?

LimitHodnotaCo s tím
Doba běhu skriptu6 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é dokumenty250 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čemcelkem 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ótGoogle 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

  1. 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
  2. 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
  3. 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
  4. Google for Developers – Apps Script, Class Body: replaceText a regulární výrazy RE2. https://developers.google.com/apps-script/reference/document/body
  5. 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
  6. Nápověda Editory Dokumentů Google – Import datových sad a tabulek. https://support.google.com/docs/answer/40608?hl=cs
  7. Google for Developers – Apps Script, Class Range: getValues a getDisplayValues. https://developers.google.com/apps-script/reference/spreadsheet/range
  8. Google for Developers – Container-bound scripts (skript připojený k tabulce). https://developers.google.com/apps-script/guides/bound
  9. Google for Developers – Structure of a Google Docs document: ID dokumentu z adresy. https://developers.google.com/workspace/docs/api/concepts/document
  10. Google for Developers – Apps Script, Class File: makeCopy a getAs (PDF). https://developers.google.com/apps-script/reference/drive/file
  11. 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
  12. 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
  13. 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.

Co vás zajímá?