01

Automatizace údajů z e-mailů do Excelu

Nápad na projekt vznikl při rozhovoru s člověkem, který vede firmu zaměřenou na návrh a realizaci čistých prostorů. V některých pracovních procesech zaměstnanci ručně přepisují údaje z příchozích e-mailů do tabulek. Cílem proto bylo ověřit, zda lze část této opakované práce automatizovat.

Vytvořil jsem demonstrační aplikaci, která se po autorizaci připojí k testovacímu Gmailu, vyhledá odpovídající objednávkové e-maily a pomocí Gemini API z jejich obsahu získá kód a název položky, počet kusů, jednotkovou cenu, měnu a případné číslo objednávky. Strukturovaná data následně uloží do souboru Excel.

Projekt vznikal jako prototyp s testovacími údaji a hypotetickými podmínkami. Jeho účelem je ukázat technickou proveditelnost a možné snížení množství ručního přepisování. Před skutečným firemním nasazením by bylo nutné řešení dále otestovat, upravit podle reálného procesu a doplnit provozní bezpečnostní pravidla.

TECHNOLOGIE: JavaScript · Node.js · Gmail API · Gemini API · ExcelJS
OBLAST: AI automatizace · zpracování e-mailů · práce s daty
ROK: 2026
02

Architektura projektu

Aplikace je rozdělena do menších modulů. Každý soubor má jednu hlavní odpovědnost, takže lze jednotlivé části samostatně testovat a případné chyby hledat na konkrétním místě.

index.js je hlavní spouštěcí soubor. Řídí celý proces od přípravy Excelu přes přihlášení ke Gmailu až po zpracování nových e-mailů a uložení výsledků. Zároveň vypisuje průběh a souhrn do konzole.

auth.js zajišťuje OAuth autorizaci vůči Googlu. Aplikace díky tomu nepoužívá heslo k e-mailové schránce a získává pouze oprávnění potřebné pro čtení zpráv.

readEmail.js komunikuje s Gmail API. Vyhledává maximálně stanovený počet zpráv podle dotazu, například podle stáří a předmětu, načítá jejich text a předává také Gmail ID, předmět, odesílatele a čas přijetí.

gemini.js posílá text e-mailu do Gemini API. Model nevrací vizuálně vytvořenou tabulku, ale JSON podle předem určeného schématu. Výstup má proto stále stejné názvy polí a lze jej spolehlivěji zpracovat v další části programu.

excel.js vytváří nebo načítá sešit, kontroluje dříve zpracované zprávy, ověřuje data a zapisuje objednávky do jednotlivých listů. Obsahuje také nabídku pro pokračování v existujícím souboru nebo vytvoření nové evidence se zálohou předchozí verze.

testGemini.js, testExcel.js a testExcelData.js umožňují samostatně ověřit komunikaci s AI, vytvoření sešitu a zápis testovacích dat bez spuštění celé aplikace.

.env obsahuje lokální konfiguraci, například Gemini API klíč. Složka creds/ obsahuje neveřejné údaje potřebné pro Google OAuth. package.json popisuje projekt, jeho závislosti a příkaz pro spuštění.

Struktura souborů projektu

Architektura struktury programu
03

Jak to funguje

Po spuštění aplikace se nejprve připraví výstupní sešit. Pokud soubor ještě neexistuje, program vytvoří nový. Pokud již existuje, uživatel může pokračovat v dosavadní evidenci, začít znovu nebo aplikaci ukončit.

Následně proběhne přihlášení pomocí Google OAuth a aplikace se připojí k testovací e-mailové schránce. Gmail API vyhledá zprávy odpovídající nastavenému filtru. V demonstrační verzi jde například o zprávy staré nejvýše tři dny, jejichž předmět obsahuje slovo objednavka.

Ještě před použitím Gemini program porovná Gmail ID zprávy s evidencí již zpracovaných e-mailů. Pokud ID v evidenci existuje, zprávu přeskočí. Tím se zabrání opakovanému zápisu i zbytečnému volání AI API.

Text nové zprávy se odešle do Gemini API. Model podle JSON schématu vrátí číslo objednávky a seznam položek. Každá položka obsahuje kód, název, počet kusů, jednotkovou cenu a měnu. Pokud údaj v e-mailu chybí, model jej nemá domýšlet a vrátí prázdnou hodnotu určenou ke kontrole.

JavaScript výsledek ověří a teprve potom jej předá modulu pro Excel. Každá položka objednávky se zapíše na samostatný řádek. Celková cena vzniká výpočtem počtu kusů a ceny za jeden kus, takže tento výpočet není ponechán pouze na AI. Po dokončení se sešit uloží a konzole zobrazí počet přidaných, přeskočených a neúspěšně zpracovaných zpráv.

Průběh aplikace v konzoli

Práce v cmd s programem
04

Excel, duplicity a zálohy

Výsledný soubor objednavky.xlsx obsahuje dva listy. List Objednávky uchovává jednotlivé položky, jejich zdrojový e-mail, objednávkové údaje a vypočítanou celkovou cenu. List Zpracované e-maily slouží jako trvalá evidence zpráv, které už program dokončil.

Hlavním klíčem pro kontrolu duplicity je Gmail ID zprávy. Toto ID je pro konkrétní e-mail stabilnější než datum, předmět nebo jméno odesílatele. Pokud jeden e-mail obsahuje více položek, každý řádek dostane vlastní identifikátor složený z Gmail ID a pořadí položky.

Evidence je uložena přímo v Excelu, a proto zůstává zachována i po vypnutí programu. Při příštím spuštění lze pokračovat ve stejném souboru a doplnit pouze nové zprávy. Neúspěšně zpracovaný e-mail se za dokončený neoznačí, takže jej lze při dalším spuštění zkusit znovu.

Pokud uživatel zvolí možnost začít znovu, původní sešit se nejprve přejmenuje na záložní kopii s časovým údajem v názvu. Až potom aplikace vytvoří nový prázdný soubor. Tento postup chrání před nechtěnou ztrátou předchozí evidence.

Výstupní tabulka

Práce v cmd s programem
05

Ošetření chyb a bezpečnost

Program kontroluje chybějící API klíč, neplatnou Google autorizaci, nedostupné Gmail API, prázdný obsah zprávy, prázdnou nebo neplatnou odpověď Gemini a data, která neodpovídají očekávané struktuře. Chyba jednoho e-mailu nemusí ukončit zpracování ostatních zpráv. Závažná chyba při spuštění nebo ukládání se zobrazí v konzoli.

Při zápisu do Excelu může nastat problém, pokud má uživatel soubor současně otevřený. Aplikace proto tuto situaci rozpozná a upozorní, že je potřeba sešit zavřít. E-mail se do evidence dokončených zpráv přidává až po ověření získaných dat a přípravě jeho položek k zápisu.

API klíče, OAuth údaje a autorizační tokeny nejsou součástí veřejného zdrojového kódu. Lokálně se ukládají do neveřejných konfiguračních souborů, které musí být uvedeny v .gitignore. Při nasazení na server je vhodné použít proměnné prostředí nebo správce tajných údajů a omezit přístup pouze na účet aplikace.

Gmail autorizace používá pouze oprávnění pro čtení zpráv. Prototyp je určen výhradně pro testovací nebo necitlivé objednávky. E-maily s osobními, obchodně citlivými nebo jinak důvěrnými údaji nemají být bez právního, bezpečnostního a smluvního posouzení odesílány do externího AI API.

Výstup AI je vždy nutné považovat za automaticky získaný návrh dat. JSON schéma, nízká míra náhodnosti a následná validace snižují riziko chyb, ale nenahrazují kontrolu člověkem u neúplných nebo neobvyklých objednávek.

06

Výsledek a další rozvoj

Výsledkem je funkční demonstrační aplikace, která propojuje autorizované čtení Gmailu, strukturovanou extrakci údajů pomocí Gemini a trvalé ukládání objednávek do Excelu. Projekt řeší celý základní cyklus od nalezení zprávy až po kontrolu duplicity, výpočet ceny a uložení výsledku.

Při práci na projektu jsem si prakticky vyzkoušel OAuth, komunikaci s REST API, práci s JSON schématem, asynchronní JavaScript, validaci dat, zápis do XLSX a rozdělení aplikace do samostatných modulů. Důležitou částí bylo také postupné hledání chyb v autorizaci a sjednocení dat mezi jednotlivými částmi programu.

Další rozvoj může zahrnovat přesnější firemní pravidla, širší práci s HTML e-maily a přílohami, označení zpráv vyžadujících kontrolu, automatické spouštění na serveru, provozní logování a napojení na firemní informační systém. Před produkčním použitím by bylo nutné provést také bezpečnostní, právní a uživatelské testování.