Automatizacija Excel izvještaja s Pythonom: praktičan primjer

Ako neko u vašoj firmi svake sedmice ručno spaja izvoze, kopira kolone i slaže isti izvještaj, ovaj vodič pokazuje kako to uradi skripta — za nekoliko sekundi i bez grešaka.

4 min čitanja

U mnogim firmama isti scenarij se ponavlja svakog ponedjeljka: neko preuzme izvoze iz knjigovodstvenog programa, web shopa ili kase, otvori pet Excel fajlova, kopira kolone, popravi datume, napravi pivot tabelu i pošalje izvještaj šefu. Dva sata posla — svake sedmice, uz realnu šansu za grešku.

Taj posao je savršen kandidat za automatizaciju. U nastavku je konkretan primjer kako ga uradi Python skripta.

Šta ćemo automatizovati

Primjer: firma ima nekoliko poslovnica i iz programa dobija izvoze prodaje u CSV i Excel formatu. Cilj je jedan Excel fajl sa tri lista:

  • Po poslovnici — ukupna prodaja po poslovnici, sortirano od najveće;
  • Po sedmici — prodaja po sedmicama i poslovnicama;
  • Svi podaci — očišćeni, spojeni podaci za dalju provjeru.

Šta vam treba

  • Python (besplatan, s python.org),
  • biblioteke pandas (obrada tabela) i openpyxl (pisanje .xlsx fajlova), instalirane jednom naredbom: pip install pandas openpyxl,
  • folder s izvozima, npr. izvozi/.

Kompletan primjer koda

from pathlib import Path
from datetime import date
import pandas as pd

ULAZ = Path("izvozi")        # folder s izvozima iz programa
IZLAZ = Path("izvjestaji")   # ovdje nastaje gotov izvještaj
IZLAZ.mkdir(exist_ok=True)

# 1) Učitaj sve izvoze (CSV i Excel) u jednu tabelu
dijelovi = []
for fajl in sorted(ULAZ.glob("*")):
    if fajl.suffix == ".csv":
        df = pd.read_csv(fajl, sep=";", decimal=",", encoding="utf-8")
    elif fajl.suffix in (".xlsx", ".xls"):
        df = pd.read_excel(fajl)
    else:
        continue
    df["Izvor"] = fajl.name
    dijelovi.append(df)
prodaja = pd.concat(dijelovi, ignore_index=True)

# 2) Očisti podatke
prodaja["Datum"] = pd.to_datetime(prodaja["Datum"], dayfirst=True)
prodaja["Poslovnica"] = prodaja["Poslovnica"].str.strip().str.title()
prodaja = prodaja.dropna(subset=["Iznos"]).drop_duplicates()

# 3) Sažeci: po poslovnici i po sedmici
po_poslovnici = (prodaja.groupby("Poslovnica", as_index=False)["Iznos"]
                 .sum().sort_values("Iznos", ascending=False))
po_sedmici = prodaja.pivot_table(index=prodaja["Datum"].dt.isocalendar().week,
                                 columns="Poslovnica", values="Iznos",
                                 aggfunc="sum", fill_value=0)

# 4) Upiši gotov izvještaj — svaka tabela na svoj list
fajl = IZLAZ / f"prodaja_{date.today():%Y-%m-%d}.xlsx"
with pd.ExcelWriter(fajl, engine="openpyxl") as xls:
    po_poslovnici.to_excel(xls, sheet_name="Po poslovnici", index=False)
    po_sedmici.to_excel(xls, sheet_name="Po sedmici")
    prodaja.to_excel(xls, sheet_name="Svi podaci", index=False)

print("Izvještaj spreman:", fajl)

Šta skripta radi, korak po korak

1. Spajanje izvoza

Skripta prolazi kroz sve fajlove u folderu, čita CSV i Excel fajlove i spaja ih u jednu tabelu. Kolona Izvor pamti iz kojeg fajla je red došao — korisno kad treba pronaći grešku. Parametri sep=";" i decimal="," su tu jer izvozi iz domaćih programa često koriste tačku-zarez i decimalni zarez.

2. Čišćenje podataka

Datumi u formatu dan.mjesec.godina pretvaraju se u prave datume, nazivi poslovnica se ujednačavaju (razmaci, velika i mala slova), a prazni i duplirani redovi se uklanjaju. Upravo ovdje ručni rad najčešće griješi.

3. Sažeci

groupby sabira prodaju po poslovnici, a pivot_table pravi tabelu po sedmicama — isto što radi pivot tabela u Excelu, samo bez klikanja.

4. Gotov Excel fajl

Rezultat je običan .xlsx fajl s datumom u nazivu, koji se može otvoriti, poslati ili dalje uređivati. Uz openpyxl se mogu dodati i formatiranje, širine kolona, grafikoni ili automatsko slanje mailom.

Automatsko pokretanje

Skripta ima najveću vrijednost kad se pokreće sama:

  • Windows: u Task Scheduleru napravite zadatak koji svakog ponedjeljka u 7:00 pokreće python izvjestaj.py.
  • Linux server: jedan red u cronu, npr. 0 7 * * 1 python3 /putanja/izvjestaj.py.

Kad zaposleni dođe na posao, izvještaj već čeka u folderu ili u inboxu.

Kada se automatizacija isplati — a kada ne

Isplati se kad se isti posao ponavlja (sedmično ili dnevno), kad uključuje više izvora podataka i kad su greške skupe. Računica je jednostavna: dva sata sedmično su oko 100 sati godišnje.

Ne isplati se za izvještaj koji se pravi jednom godišnje ili čiji se format stalno mijenja. A za jednostavne slučajeve unutar samog Excela vrijedi pogledati i Power Query — ugrađeni alat koji može spajati i čistiti tabele bez programiranja.

Savjet iz prakse

Prije automatizacije zapišite proces korak po korak, onako kako ga zaposleni zaista radi. Polovina problema se riješi već tada — jer se pokaže koji koraci uopće nisu potrebni.

Šta dalje

Ovaj primjer je namjerno jednostavan. U stvarnim projektima skripta često preuzima podatke direktno iz programa preko API-ja ili baze, šalje izvještaj mailom, upozorava na neuobičajene vrijednosti ili puni dashboard koji se gleda u browseru. Pogledajte šta sve uključuje usluga web aplikacija i automatizacije, a za proizvodne firme i primjere iz softvera za proizvodnju.

Engimotive · Objavljeno 27. oktobra 2026.

FAQ

Često postavljana pitanja

Treba li mi programer da bih koristio ovakvu skriptu?

Za postavljanje i prilagođavanje — da, ili barem neko ko se snalazi s Pythonom. Za svakodnevno korištenje — ne. Gotova skripta se pokreće dvoklikom ili automatski u zadato vrijeme, a rezultat je običan Excel fajl.

Šta ako se format izvoza iz programa promijeni?

Tada skriptu treba prilagoditi — obično je to sitna izmjena. Dobra skripta provjerava da li su sve očekivane kolone tu i jasno javlja grešku, umjesto da tiho napravi pogrešan izvještaj.

Jesu li podaci sigurni?

Skripta radi na vašem računaru ili serveru i ne šalje podatke nikamo, osim ako to izričito ne programirate. To je jedna od prednosti u odnosu na online servise za obradu tabela.

Kontakt

Imate projekat na umu? Razgovarajmo.

Opišite ideju u nekoliko rečenica. Odgovaram lično, u roku od 24 sata radnim danima, s konkretnim prijedlogom sljedećih koraka.

Emailinfo@engimotive.com
LokacijaZenica, Bosna i Hercegovina
Način radaRemote — BiH, region i EU

Šta slijedi: odgovor s nekoliko pitanja → kratak razgovor → fiksna ponuda. Bez obaveze.

Polja označena sa * su obavezna. Vaše podatke koristim samo za odgovor na upit. Politika privatnosti.