RPA & Automation May 22, 2026 · 7 min read · 0 dilihat

Otomatisasi Laporan Excel Harian dengan Python dan OpenPyXL: Studi Kasus Nyata

Capek setiap hari membuka Excel, copy-paste data, bikin formula, dan format laporan? Bayangkan jika semua itu berjalan otomatis sebelum kamu datang ke kantor — bos malah kira kamu datang lebih pagi! Artikel ini akan memandu kamu membuat sistem otomatisasi laporan Excel harian menggunakan Python dan OpenPyXL dengan studi kasus nyata: rekap data penjualan dari CSV langsung ke Excel yang rapi, berwarna, dan siap presentasi. Bonus: cara jadwalkan script agar jalan otomatis setiap pagi tanpa intervensi manual.

IKHSAN MAULANA

IKHSAN MAULANA

Web, Android, and RPA Development

Otomatisasi Laporan Excel Harian dengan Python dan OpenPyXL: Studi Kasus Nyata

Otomatisasi adalah superpower yang sering dilupakan di kantor Indonesia. Sementara rekan kerja masih klik-klik Excel dengan sabar, kamu bisa fokus ke tugas lebih penting — atau sekadar minum kopi santai.

Artikel ini bukan hanya teori. Kita akan langsung bikin script Python yang mengubah file CSV penjualan harian menjadi laporan Excel berformat profesional: header berwarna, data terformat rapi, formula SUM otomatis, dan nama file otomatis sesuai tanggal. Semua bisa berjalan terjadwal setiap pagi tanpa kamu sentuh.

Kenapa Otomatisasi Excel dengan Python?

Kamu mungkin tanya: "Kenapa nggak pakai macro Excel aja?". Fair question. Alasannya sederhana:

  • Fleksibilitas: Python bisa baca data dari berbagai sumber (CSV, API, database) dengan mudah. Excel macro lebih terbatas.
  • Maintainability: Script Python lebih mudah di-debug dan di-update dibanding VBA. Apalagi kalau tim kamu multi-person.
  • Skalabilitas: Kalau nanti laporan berkembang jadi puluhan file? Python handle dengan loop. VBA mulai berkeringat.
  • No Excel License Required: Script bisa jalan di server atau VPS tanpa perlu instal Microsoft Office. Hemat biaya lisensi perusahaan.

OpenPyXL adalah library Python yang memungkinkan kita baca, edit, dan buat file Excel (.xlsx) tanpa perlu Excel itself. Powerful banget.

Setup & Install Library

Pertama, pastikan kamu punya Python 3.6+ terinstal. Buka terminal/command prompt dan jalankan:

pip install openpyxl

Itu aja. Nggak perlu ribet. Kalau kamu juga ingin baca data dari CSV (rekomendasi), instal pandas juga:

pip install pandas openpyxl

Untuk testing lokal, kamu butuh dummy CSV. Contoh file penjualan_raw.csv:

tanggal,produk,qty,harga,total
2024-01-15,Laptop,2,15000000,30000000
2024-01-15,Mouse,10,500000,5000000
2024-01-15,Keyboard,5,1500000,7500000
2024-01-15,Monitor,3,4000000,12000000

Script Utama: Bikin Laporan Otomatis

Sekarang kita ke bagian seru. Script ini akan:

  1. Baca file CSV penjualan harian
  2. Hitung total per produk dan grand total
  3. Bikin file Excel dengan header berwarna
  4. Tambah formula SUM otomatis
  5. Simpan dengan nama file berdasarkan tanggal

Berikut script lengkapnya:

import pandas as pd
from openpyxl import Workbook
from openpyxl.styles import Font, PatternFill, Alignment, Border, Side
from datetime import datetime
import os

def buat_laporan_penjualan(csv_path, output_dir='laporan'):
    """
    Membuat laporan Excel otomatis dari file CSV penjualan.
    """
    
    # Pastikan folder output ada
    if not os.path.exists(output_dir):
        os.makedirs(output_dir)
    
    # Baca CSV
    df = pd.read_csv(csv_path)
    
    # Buat workbook baru
    wb = Workbook()
    ws = wb.active
    ws.title = "Laporan Penjualan"
    
    # Header styling
    header_fill = PatternFill(start_color="4472C4", end_color="4472C4", fill_type="solid")
    header_font = Font(bold=True, color="FFFFFF", size=12)
    header_alignment = Alignment(horizontal="center", vertical="center")
    border = Border(
        left=Side(style='thin'),
        right=Side(style='thin'),
        top=Side(style='thin'),
        bottom=Side(style='thin')
    )
    
    # Tulis header
    headers = ['Tanggal', 'Produk', 'Qty', 'Harga', 'Total']
    for col_idx, header in enumerate(headers, 1):
        cell = ws.cell(row=1, column=col_idx, value=header)
        cell.fill = header_fill
        cell.font = header_font
        cell.alignment = header_alignment
        cell.border = border
    
    # Tulis data dari DataFrame
    for row_idx, row in enumerate(df.values, 2):
        for col_idx, value in enumerate(row, 1):
            cell = ws.cell(row=row_idx, column=col_idx, value=value)
            cell.border = border
            cell.alignment = Alignment(horizontal="left", vertical="center")
            
            # Format rupiah untuk kolom harga dan total
            if col_idx in [4, 5]:
                cell.number_format = '#,##0'
    
    # Tambah row untuk total
    last_row = len(df) + 2
    ws.cell(row=last_row, column=1, value="GRAND TOTAL")
    ws.cell(row=last_row, column=1).font = Font(bold=True)
    
    # Formula SUM otomatis di kolom Total
    total_cell = ws.cell(row=last_row, column=5)
    total_cell.value = f"=SUM(E2:E{last_row-1})"
    total_cell.font = Font(bold=True)
    total_cell.number_format = '#,##0'
    total_cell.fill = PatternFill(start_color="FFF2CC", end_color="FFF2CC", fill_type="solid")
    
    # Set lebar kolom
    ws.column_dimensions['A'].width = 15
    ws.column_dimensions['B'].width = 20
    ws.column_dimensions['C'].width = 10
    ws.column_dimensions['D'].width = 18
    ws.column_dimensions['E'].width = 18
    
    # Nama file berdasarkan tanggal hari ini
    tanggal_hari_ini = datetime.now().strftime('%Y%m%d')
    filename = f"Laporan_Penjualan_{tanggal_hari_ini}.xlsx"
    filepath = os.path.join(output_dir, filename)
    
    # Simpan file
    wb.save(filepath)
    print(f"✓ Laporan berhasil dibuat: {filepath}")
    print(f"✓ Total baris data: {len(df)}")
    print(f"✓ Grand total sudah dihitung otomatis dengan formula")
    
    return filepath

if __name__ == "__main__":
    buat_laporan_penjualan('penjualan_raw.csv')

Simpan script di atas dengan nama buat_laporan.py. Jalankan dengan:

python buat_laporan.py

Hasilnya? File Laporan_Penjualan_20240115.xlsx otomatis muncul di folder laporan/ dengan format rapi, header biru, dan formula SUM yang siap tinggal pakai. Bos akan terkesan.

Jadwalkan Script Agar Jalan Otomatis

Keren, tapi script ini masih harus dijalankan manual. Biar benar-benar otomatis, kita perlu jadwalkannya. Ada dua cara: Windows Task Scheduler atau cron job Linux.

Cara 1: Windows Task Scheduler (Paling Gampang)

Cocok kalau kamu kerja di Windows dan file penjualan harian sudah tersedia di folder tertentu.

  1. Buka Task Scheduler (ketik di Windows search).
  2. Klik "Create Basic Task" di sidebar kanan.
  3. Beri nama: "Otomatisasi Laporan Penjualan Harian".
  4. Di tab Trigger, pilih "Daily" dan set waktu (misalnya 08:00 pagi).
  5. Di tab Action, pilih "Start a program". Isi:
    • Program/script: python (atau path lengkap Python, misal: C:\Users\YourName\AppData\Local\Programs\Python\Python311\python.exe)
    • Add arguments: C:\path\ke\buat_laporan.py
    • Start in: C:\path\ke\folder\script\
  6. Klik Finish. Done!

Sekarang script otomatis jalan setiap pukul 08:00 pagi. Kamu bisa tidur sambil Excel sedang dikerjakan.

Cara 2: Cron Job (Linux/Mac)

Kalau kamu pakai Linux atau Mac, pakai cron. Buka terminal dan ketik:

crontab -e

Tambahkan baris berikut (misalnya jalankan pukul 06:00 pagi):

0 6 * * * /usr/bin/python3 /home/username/buat_laporan.py

Penjelasan: 0 6 = jam 06:00, * * * = setiap hari setiap bulan setiap tahun. Simpan dan selesai.

Cek apakah cron job sudah terdaftar:

crontab -l

Tips & Troubleshooting

  • File CSV tidak ditemukan? Pastikan path file sudah benar. Gunakan absolute path, bukan relative path, supaya tidak error saat task scheduler menjalankannya.
  • Permission denied di Linux? Jalankan chmod +x buat_laporan.py untuk beri permission execute.
  • Mau baca dari database langsung? Ganti bagian pd.read_csv() dengan koneksi database pakai sqlalchemy atau psycopg2. Begitu juga email laporan otomatis pakai smtplib.
  • File Excel corrupt? Pastikan tidak ada dua proses menulis file yang sama secara bersamaan. Tambah timestamp ke filename untuk safety.
  • Kolom terlalu sempit/lebar? Edit nilai ws.column_dimensions['A'].width = 15 sesuai kebutuhan.

Bonus: Kirim Laporan via Email Otomatis

Agar laporan langsung masuk inbox bos, tambahkan kode ini di akhir script:

import smtplib
from email.mime.multipart import MIMEMultipart
from email.mime.base import MIMEBase
from email.mime.text import MIMEText
from email import encoders

def kirim_email(filepath, email_penerima, email_pengirim, password):
    msg = MIMEMultipart()
    msg['From'] = email_pengirim
    msg['To'] = email_penerima
    msg['Subject'] = f"Laporan Penjualan {datetime.now().strftime('%Y-%m-%d')}"
    
    body = "Laporan penjualan harian terlampir."
    msg.attach(MIMEText(body, 'plain'))
    
    attachment = open(filepath, 'rb')
    part = MIMEBase('application', 'octet-stream')
    part.set_payload(attachment.read())
    encoders.encode_base64(part)
    part.add_header('Content-Disposition', f'attachment; filename= {os.path.basename(filepath)}')
    msg.attach(part)
    
    server = smtplib.SMTP('smtp.gmail.com', 587)
    server.starttls()
    server.login(email_pengirim, password)
    server.send_message(msg)
    server.quit()
    print(f"✓ Email terkirim ke {email_penerima}")

# Panggil di akhir buat_laporan_penjualan()
kirim_email(filepath, 'boss@perusahaan.com', 'your_email@gmail.com', 'your_app_password')

Catatan: Untuk Gmail, pakai App Password bukan password akun biasa (di security settings Gmail). Dokumentasi lengkap bisa cek di OpenPyXL official docs.

Kesimpulan

Otomatisasi laporan Excel bukan lagi mimpi. Dengan Python dan OpenPyXL, kamu bisa menghemat puluhan jam kerja manual setiap bulan — dan fokus ke tugas yang lebih meaningful. Script di artikel ini bisa langsung kamu copy-paste dan sesuaikan dengan data kamu sendiri.

Ingat: automation adalah gift yang terus memberi. Setiap kali script berjalan, kamu menyelamatkan 30 menit waktu kamu. Kalau 22 hari kerja, itu 11 jam per bulan. Setahun? 132 jam — atau hampir 3 minggu kerja penuh yang bisa kamu hemat. Mulai automasi sekarang, dan rasakan bedanya!

Untuk tutorial Python & RPA lainnya, pantengin terus duamasatech.com. Happy automating! 🚀

Tags:

#Tutorial #RPA #Excel Automation #Python #OpenPyXL

Share this article:

IKHSAN MAULANA

Tentang Penulis

IKHSAN MAULANA

Web, Android, and RPA Development

I am an experienced IT programmer specializing in Web Development (Laravel/PHP), Android (Dart/Flutter), and RPA (UiPath). I love building clean, efficient solutions that solve real-world problems. With 4+ years of hands...

Download CV

Sebelum download, boleh kenalan dulu? Form ini opsional — kosongin juga gak apa-apa, langsung klik Download.