Lewati ke konten utama
seratusribu.com
Semua artikel
Python Tools

Laporan Excel Otomatis dengan Grafik dari File CSV Pakai Python

Oleh Anang H. Darmawan

3 menit baca
Laporkan
Laporan Excel Otomatis dengan Grafik dari File CSV Pakai Python

Foto: Cht Gsml / Unsplash

Setiap awal bulan ada orang yang membuka file CSV hasil ekspor sistem, menyalin kolom ke Excel, merapikan format angka, lalu membuat grafik yang sama persis dengan bulan lalu. Pekerjaan itu bisa makan setengah hari, padahal langkahnya selalu sama. Langkah yang selalu sama adalah kandidat paling pas untuk script Python.

Garis besar alurnya

Alurnya ada empat tahap. Pertama, baca CSV dengan pandas. Kedua, olah datanya: filter periode, kelompokkan per produk atau cabang, hitung total. Ketiga, tulis hasilnya ke file .xlsx. Keempat, buka file itu dengan openpyxl untuk memberi format angka, lebar kolom, dan grafik.

Kenapa dua library? pandas unggul untuk mengolah tabel, sedangkan openpyxl unggul untuk mengatur tampilan workbook. Grafik yang dibuat openpyxl adalah grafik asli Excel, bukan gambar tempelan, jadi atasanmu masih bisa mengubah warna atau judulnya sendiri tanpa menyentuh script.

Jebakan encoding dan pemisah di CSV

Masalah pertama hampir selalu muncul di tahap membaca. CSV dari Excel di Windows berbahasa Indonesia sering memakai titik koma sebagai pemisah kolom, bukan koma, karena koma sudah dipakai sebagai tanda desimal. Kalau semua data masuk ke satu kolom, tambahkan sep=";" di read_csv.

Encoding juga sering bermasalah. File yang disimpan sebagai CSV UTF-8 dari Excel biasanya diawali penanda BOM, sehingga nama kolom pertama terbaca dengan karakter aneh di depannya. Pakai encoding="utf-8-sig" untuk file seperti itu. Kalau muncul UnicodeDecodeError, kemungkinan file disimpan dengan encoding lama Windows. Coba cp1252, lalu cek apakah huruf beraksen dan simbol terbaca benar.

Angka dengan format Indonesia seperti 1.250.000,50 juga perlu diberi tahu. Parameter thousands="." dan decimal="," membuat pandas membacanya sebagai angka, bukan teks. Cek hasilnya dengan df.dtypes. Kolom nominal harus bertipe angka, bukan object.

Format rupiah tanpa mengubah angka jadi teks

Kesalahan yang sering saya lihat: angka diubah menjadi teks seperti "Rp1.250.000" sebelum ditulis ke Excel. Tampilannya memang rapi, tapi kolom itu tidak bisa dijumlah, diurutkan, atau dijadikan grafik. Biarkan nilainya tetap angka, lalu atur number_format sel di openpyxl, misalnya "Rp"#,##0. Pemisah ribuan yang tampil nantinya mengikuti pengaturan regional Excel di komputer pembuka.

Sekalian atur lebar kolom dan bekukan baris header. Dua hal kecil ini yang membuat laporan terasa dibuat manusia, bukan hasil dump data mentah.

Grafik dan jadwal harian

Untuk grafik, openpyxl menyediakan BarChart dan LineChart. Kamu cukup menunjuk rentang data dan kategori dengan Reference, lalu menaruh grafik di sel tertentu. Grafik batang cocok untuk perbandingan antar produk, sedangkan grafik garis cocok untuk tren harian dalam satu bulan.

Setelah script jalan dengan benar, jadwalkan. Di Linux atau macOS pakai cron, di Windows pakai Task Scheduler. Kalau kamu belum yakin dengan sintaks cron, tempel ekspresinya di Cron Expression Reader untuk melihat artinya dalam kalimat biasa. Beri nama file hasil dengan tanggal, misalnya laporan-2026-09-18.xlsx, supaya laporan lama tidak tertimpa.

Kalau kamu ingin langsung memakai versi yang sudah jadi, Report generator CSV, Excel + chart seharga Rp200.000 membaca data mentah dari CSV atau Excel lalu menyusunnya menjadi laporan berformat lengkap dengan grafik. Isinya source code Python, requirements.txt, dan contoh penggunaan, dan bebas kamu modifikasi sesuai kolom datamu.

Laporan yang sudah jadi sering masih harus dikirim sebagai PDF ke pihak yang tidak memakai Excel. Untuk itu, konverter dokumen batch mengubah banyak file Word, Excel, atau gambar di satu folder ke PDF dalam satu perintah.

Mulailah dari satu laporan saja, yang paling sering kamu kerjakan ulang. Ambil CSV bulan lalu, tulis script yang menghasilkan satu sheet dan satu grafik, lalu bandingkan dengan versi manualmu. Kalau angkanya sama persis, laporan bulan depan tidak perlu disentuh tangan lagi.