Panduan
Python untuk otomasi pekerjaan kantor: mana yang pantas diotomasi, mana yang tidak
Panduan memilih pekerjaan kantor berulang yang pantas diotomasi dengan Python dan yang lebih murah dikerjakan manual: menggabungkan puluhan berkas Excel bulanan, merapikan nama berkas massal, membersihkan data berantakan, dan menghasilkan laporan berulang. Berisi kode yang bisa dijalankan dengan pathlib, csv, pandas, dan openpyxl, batas ketika Excel atau Power Query lebih tepat, serta risiko skrip yang tidak punya pemilik.
Ditulis Redaksi KelasGratis · Terbit 2026-09-22
Untuk siapa: Staf administrasi, keuangan, dan operasional yang sudah menguasai dasar Python dan ingin memangkas pekerjaan berulang di pekerjaan yang sekarang.

Artikel induk tentang urutan belajar Python menyebut otomatisasi pekerjaan kantor sebagai arah lanjutan, dalam satu baris. Baris itu menyembunyikan keputusan yang paling sering salah diambil: bukan bagaimana menulis skripnya, melainkan pekerjaan mana yang pantas ditulis skripnya. Halaman ini membahas keputusan itu, dengan kode yang bisa dijalankan dan batas-batas ketika Python bukan jawabannya. Penilaian redaksi di artikel ini berdasarkan sumber yang dicantumkan di bagian akhir.
Sasarannya orang yang sudah bisa menulis fungsi, perulangan, dan dictionary, lalu melihat tumpukan berkas di folder kantor dan bertanya apakah ini layak dikerjakan mesin. Kalau dasar itu belum selesai, kerjakan dulu; skrip yang ditulis tanpa paham perulangan akan berjalan dan salah diam-diam.
Hitung dulu sebelum menulis kode
Otomasi punya dua biaya: waktu menulis skripnya, dan waktu merawatnya setiap kali berkas sumber berubah. Biaya pertama terasa sekali, biaya kedua menagih terus. Sebuah skrip layak ditulis kalau total waktu manual setahun lebih besar dari waktu menulis ditambah waktu merawat di tahun yang sama.
| Pekerjaan | Sekali pengerjaan | Frekuensi | Keputusan |
|---|---|---|---|
| Menggabungkan 40 berkas CSV cabang | 90 menit | Tiap bulan | Otomasi: 18 jam setahun |
| Mengganti nama 600 hasil pindai arsip | 4 jam | Sekali, saat migrasi | Otomasi: manual terlalu rawan salah ketik |
| Merapikan satu daftar 300 baris | 20 menit | Sekali | Manual: menulis skrip lebih lama |
| Rekap penjualan 500 ribu baris | Tidak selesai di spreadsheet | Tiap minggu | Otomasi atau basis data |
Penilaian redaksi: kesalahan yang lebih mahal bukan memilih manual untuk pekerjaan yang pantas diotomasi, melainkan sebaliknya. Skrip yang dipakai sekali lalu ditinggalkan tetap menempel di folder bersama, tetap terlihat seperti alat resmi, dan tetap akan dijalankan orang lain enam bulan kemudian saat struktur berkasnya sudah berubah.
Empat pekerjaan yang hampir selalu lolos hitungan
- Menggabungkan berkas berulang: puluhan CSV atau Excel berkolom sama, datang setiap periode, dari sumber berbeda.
- Merapikan berkas massal: mengganti nama, memindahkan ke folder per tahun, atau memisahkan berdasar pola pada namanya.
- Membersihkan data berantakan: tanggal beda format, angka bercampur titik dan koma, spasi tersembunyi, dan kode cabang yang nol depannya hilang.
- Laporan berulang: rekap yang bentuk dan penerimanya sama setiap bulan, hanya isinya yang berganti.
Kasus 1: menggabungkan puluhan berkas bulanan jadi satu
Ini pekerjaan otomasi kantor yang paling sering dipakai dan paling aman, karena hasilnya mudah diperiksa: jumlah baris gabungan harus sama dengan jumlah baris semua sumber. Versi pertama hanya memakai pustaka bawaan, jadi jalan di komputer kantor yang tidak boleh memasang paket.
from pathlib import Path
import csv
sumber = Path("data/2026")
keluaran = Path("gabungan.csv")
berkas = sorted(sumber.glob("*.csv"))
if not berkas:
raise SystemExit(f"Tidak ada berkas CSV di {sumber}")
kolom = None
penulis = None
total = 0
with keluaran.open("w", newline="", encoding="utf-8") as keluar:
for path in berkas:
# utf-8-sig membuang penanda BOM yang ditinggalkan Excel saat menyimpan CSV
with path.open(newline="", encoding="utf-8-sig") as masuk:
pembaca = csv.DictReader(masuk)
if kolom is None:
kolom = pembaca.fieldnames
penulis = csv.DictWriter(keluar, fieldnames=[*kolom, "sumber"])
penulis.writeheader()
elif pembaca.fieldnames != kolom:
raise SystemExit(f"{path.name}: susunan kolomnya berbeda dari berkas pertama")
for baris in pembaca:
baris["sumber"] = path.name
penulis.writerow(baris)
total += 1
print(f"{len(berkas)} berkas, {total} baris, ditulis ke {keluaran}")Tiga hal membedakannya dari skrip yang berbahaya. Skrip berhenti bila foldernya kosong, bukan menghasilkan berkas nol baris. Skrip berhenti bila susunan kolom sebuah berkas berbeda, karena kolom yang bergeser adalah cara paling umum rekap menjadi salah tanpa error. Dan kolom sumber ikut ditulis, sehingga saat ada angka aneh kamu tahu berkas mana yang dibuka.
Kalau sumbernya .xlsx, pandas memangkasnya jadi beberapa baris. Perhatikan argumen dtype: tanpa itu, kode cabang 007 dibaca sebagai angka 7 dan nol depannya hilang untuk selamanya.
from pathlib import Path
import pandas as pd
sumber = Path("data/2026")
bagian = []
for path in sorted(sumber.glob("*.xlsx")):
df = pd.read_excel(path, sheet_name="Rekap", dtype={"kode_cabang": str})
df["sumber"] = path.name
bagian.append(df)
if not bagian:
raise SystemExit(f"Tidak ada berkas .xlsx di {sumber}")
gabungan = pd.concat(bagian, ignore_index=True)
gabungan.to_csv("gabungan.csv", index=False)
print(gabungan["sumber"].value_counts())Kasus 2: mengganti nama dan merapikan berkas massal
Mengganti nama ratusan berkas tidak bisa dibatalkan. Karena itu bentuk skripnya berbeda: ia dijalankan dua kali, sekali untuk mencetak rencana dan sekali untuk mengeksekusinya. Modul pathlib menyediakan rename dan with_name, dan modul re membaca pola pada nama lama.
from pathlib import Path
import re
folder = Path("arsip/scan")
UJI_COBA = True # ubah ke False setelah daftar di bawah diperiksa
# 05-03-2026 Surat Jalan PT Maju.pdf -> 2026-03-05_Surat-Jalan-PT-Maju.pdf
pola = re.compile(r"^(\d{2})-(\d{2})-(\d{4})[ _](.+)$")
for path in sorted(folder.glob("*.pdf")):
cocok = pola.match(path.stem)
if not cocok:
print(f"LEWAT {path.name}")
continue
hari, bulan, tahun, sisa = cocok.groups()
nama_baru = f"{tahun}-{bulan}-{hari}_{sisa.strip().replace(' ', '-')}{path.suffix}"
tujuan = path.with_name(nama_baru)
if tujuan.exists():
print(f"BENTROK {path.name} -> {nama_baru}")
continue
print(f"GANTI {path.name} -> {nama_baru}")
if not UJI_COBA:
path.rename(tujuan)Berkas yang namanya tidak cocok pola dilewati dan dicetak, bukan ditebak. Nama tujuan yang sudah ada dianggap bentrok, karena rename menimpa berkas yang ada di beberapa sistem. Seluruh perubahan dicetak sebelum satu pun dijalankan, sehingga pola yang salah ketahuan saat masih di layar. Nama yang dimulai dari tahun juga terurut kronologis di penjelajah berkas mana pun.
Kasus 3: membersihkan data yang formatnya berantakan
Satu kolom tanggal berisi tiga format karena diisi tiga orang, kolom nilai berisi Rp dan titik ribuan, dan nama cabang punya spasi belakang yang tidak terlihat tetapi memecah pengelompokan jadi dua baris. Pembersihan begini tempatnya di Python, bukan di pencarian dan penggantian manual, karena aturannya ditulis sekali lalu memberi hasil yang sama persis setiap bulan.
import pandas as pd
df = pd.read_csv("gabungan.csv", dtype=str).fillna("")
# Samakan nama kolom
df.columns = [c.strip().lower().replace(" ", "_") for c in df.columns]
df["cabang"] = df["cabang"].str.strip().str.title()
# Format tanggal ditegaskan; yang gagal jadi NaT
df["tanggal"] = pd.to_datetime(df["tanggal"], format="%d/%m/%Y", errors="coerce")
# Buang Rp dan titik ribuan, koma desimal jadi titik
angka = df["nilai"].str.replace(r"[^0-9,-]", "", regex=True).str.replace(",", ".", regex=False)
df["nilai"] = pd.to_numeric(angka, errors="coerce")
# Baris yang gagal disisihkan, tidak dibuang diam-diam
rusak = df[df["tanggal"].isna() | df["nilai"].isna()]
bersih = df.drop(rusak.index)
rusak.to_csv("perlu-diperiksa.csv", index=False)
bersih.to_csv("bersih.csv", index=False)
print(f"{len(bersih)} baris bersih, {len(rusak)} disisihkan")
if len(rusak) > len(df) * 0.02:
raise SystemExit("Lebih dari 2 persen baris gagal dibaca: periksa format sumbernya")Bagian terpenting ada di enam baris terakhir. Argumen errors="coerce" mengubah nilai yang gagal dibaca menjadi kosong tanpa error, yang berarti data bisa menyusut tanpa ada yang tahu. Menyisihkan baris gagal ke berkas terpisah mengubah kegagalan diam menjadi kegagalan yang terlihat, dan ambang dua persen menghentikan skrip ketika sumbernya berubah bentuk.
Penilaian redaksi: dalam otomasi kantor, kegagalan yang diam jauh lebih mahal daripada kegagalan yang berisik. Skrip yang berhenti dengan pesan error membuat orang kesal sepuluh menit. Skrip yang mengirim laporan berisi 4.000 dari 4.300 baris membuat keputusan diambil di atas angka yang salah, dan itu baru ketahuan berbulan-bulan kemudian.
Kasus 4: menghasilkan laporan berulang ke Excel
Penerima laporan hampir selalu meminta Excel, bukan CSV, dengan judul kolom tebal, angka berpemisah ribuan, dan baris pertama yang dibekukan. Semua itu ditulis dengan openpyxl, mesin yang juga dipakai pandas untuk menulis .xlsx.
from pathlib import Path
import pandas as pd
from openpyxl import load_workbook
from openpyxl.styles import Font
bersih = pd.read_csv("bersih.csv", parse_dates=["tanggal"])
rekap = (
bersih.assign(bulan=bersih["tanggal"].dt.to_period("M").astype(str))
.groupby(["bulan", "cabang"], as_index=False)["nilai"]
.sum()
)
keluaran = Path("laporan-bulanan.xlsx")
with pd.ExcelWriter(keluaran, engine="openpyxl") as penulis:
rekap.to_excel(penulis, sheet_name="Rekap", index=False)
wb = load_workbook(keluaran)
ws = wb["Rekap"]
for sel in ws[1]:
sel.font = Font(bold=True)
for baris in ws.iter_rows(min_row=2, min_col=3, max_col=3):
for sel in baris:
sel.number_format = "#,##0"
ws.freeze_panes = "A2"
wb.save(keluaran)Skrip itu menulis berkas baru, bukan membuka laporan bulan lalu lalu menambah sheet. openpyxl membaca dan menulis ulang seluruh isi buku kerja, dan hal yang tidak didukungnya dapat hilang saat disimpan ulang. Berkas baru tiap periode membuat risiko itu nol.
Kapan Python kalah dari Excel atau Power Query
Power Query adalah mesin pengambilan dan transformasi data yang menyatu di Excel. Ia menggabungkan seluruh berkas dalam satu folder, membersihkan kolom, lalu memuat hasilnya ke lembar kerja yang diperbarui dengan satu tombol. Untuk penggabungan berkas berbentuk seragam, itu menyelesaikan pekerjaan yang sama dengan skrip Python pertama di artikel ini.
| Pekerjaan | Alat yang lebih murah | Alasan |
|---|---|---|
| Gabung 40 berkas berkolom identik dari satu folder | Power Query | Langkahnya tersimpan di berkas, diperbarui satu tombol |
| Rekap dan pivot untuk rapat minggu depan | Excel | Bentuk akhirnya masih akan diubah beberapa kali |
| Pembersihan dengan aturan bercabang dan regex | Python | Aturan rumit lebih mudah dibaca sebagai kode |
| Berjalan terjadwal tanpa ada yang membuka berkas | Python | Power Query butuh Excel terbuka atau layanan berbayar |
| Mengambil data dari basis data atau antarmuka program | Python atau SQL | Sumbernya di luar jangkauan spreadsheet biasa |
| Dirawat rekan yang tidak menulis kode | Power Query | Tidak ada Python yang harus dipasang di komputer siapa pun |
Penilaian redaksi: baris terakhir tabel itu paling sering diabaikan orang yang baru bisa Python. Skrip yang hanya bisa dijalankan penulisnya, di komputer penulisnya, bukan otomasi kantor melainkan ketergantungan pada satu orang. Kalau pekerjaannya akan diteruskan ke rekan lain dalam enam bulan, Power Query yang tersimpan di dalam berkasnya sendiri sering lebih tahan lama daripada Python yang lebih cepat ditulis.
Tiga risiko yang jarang disebut saat orang mengajari otomasi
- Skrip tanpa pemilik. Penulisnya pindah bagian, dan skripnya tetap dijalankan tiap bulan oleh orang yang tidak bisa membacanya. Ketika hasilnya aneh, tidak ada yang berani mengubah dan tidak ada yang berani berhenti memakainya.
- Berkas sumber yang berubah diam-diam. Seseorang menambah kolom di tengah, mengganti nama sheet, atau mengganti format tanggal. Skrip yang tidak memeriksa bentuk sumbernya terus berjalan dan terus menghasilkan angka, hanya saja angka yang salah.
- Hasil yang tidak pernah diperiksa. Otomasi memindahkan pekerjaan dari mengerjakan menjadi memeriksa, dan bagian memeriksa itulah yang paling cepat ditinggalkan. Laporan yang keluar otomatis sebelas bulan tanpa pernah dibandingkan dengan sumbernya tidak diketahui benar atau salahnya.
Urutan memulai tanpa mengacaukan berkas kantor
- Salin data sungguhan ke folder latihan di komputermu, lalu kerjakan di salinan itu sampai hasilnya benar.
- Kerjakan satu berkas dulu. Perulangan ditambahkan setelah satu berkas terbukti benar.
- Cetak, jangan langsung tulis. Versi pertama skrip yang mengubah berkas hanya mencetak rencananya.
- Bandingkan hasil skrip dengan hasil manual satu kali penuh. Kalau angkanya beda, skripnya yang salah sampai terbukti sebaliknya.
- Baru jalankan pada data sungguhan, dengan folder keluaran terpisah, dan tinggalkan catatan berisi cara menjalankan serta apa yang diperiksa setelah selesai.
Yang perlu dikuasai supaya keempat kasus di atas bisa dikerjakan
Kelas Python dari Nol menutup bagian yang dipakai di seluruh skrip di halaman ini: perulangan, dictionary, membaca berkas, dan menangani error. Kelas Analisis Data dengan Python menambahkan pandas, yang dipakai di tiga dari empat kasus. Dua kelas itu cukup untuk menulis ulang semua kode di atas dari halaman kosong.
Tiga kelas pendukung lebih cepat terasa gunanya daripada yang orang duga. Terminal Dasar dipakai setiap kali skrip dijalankan di luar browser. Regex Dasar dipakai persis seperti di kasus kedua, untuk membaca pola pada nama berkas. Menata Data di Spreadsheet menjelaskan bentuk tabel yang bisa dibaca mesin, dan bentuk itu menentukan apakah skrip pembersihan cukup sepuluh baris atau seratus.
Kelas Rekap dan Laporan Penjualan berguna dari arah berlawanan: ia menunjukkan bentuk laporan yang diminta penerima, dan otomasi yang menghasilkan bentuk salah tidak menghemat apa pun. Untuk catatan di langkah terakhir, alat pembuat tabel Markdown menyusun tabel masukan dan keluaran tanpa menghitung pemisah kolom sendiri.
Pertanyaan yang sering muncul
- Apakah perlu Python terpasang di komputer kantor untuk otomasi pekerjaan kantor?
- Ya, untuk menjalankan skrip pada berkas sungguhan. Latihan Python di KelasGratis berjalan di browser, tetapi skrip yang membaca folder dan menulis berkas membutuhkan Python terpasang. Kalau kantor melarang pemasangan, Power Query di dalam Excel menyelesaikan sebagian besar kasus penggabungan berkas.
- Pakai pandas atau modul csv bawaan untuk menggabungkan berkas?
- Modul csv bawaan cukup kalau berkasnya CSV, kolomnya sama, dan tidak ada perhitungan setelah digabung. pandas dipilih kalau sumbernya .xlsx, kolomnya perlu disamakan, atau setelah digabung ada pengelompokan dan penjumlahan. Untuk berkas ratusan megabita, modul bawaan memakai memori jauh lebih sedikit karena membaca baris demi baris.
- Bagaimana mencegah nol di depan kode cabang hilang saat membaca Excel?
- Tegaskan tipe kolomnya sebagai teks lewat argumen dtype pada read_excel. Tanpa itu, 007 dibaca sebagai angka 7 dan nol depannya tidak bisa dikembalikan karena informasinya sudah hilang. Hal yang sama terjadi pada nomor telepon dan nomor rekening.
- Kapan otomasi tidak sepadan dengan waktu menulisnya?
- Ketika pekerjaannya dipakai sekali, ketika aturannya berubah setiap periode, atau ketika hasilnya masih akan diubah manual setelah skrip selesai. Perkiraan kasarnya: kalau total waktu manual setahun lebih kecil daripada dua kali perkiraan waktu menulis skrip, kerjakan manual.
- Apakah sertifikat kelas Python bisa dipakai melamar posisi otomasi?
- Sertifikat KelasGratis adalah bukti penyelesaian kelas, bukan akreditasi maupun sertifikat kompetensi dari lembaga sertifikasi profesi. Untuk pekerjaan otomasi, yang menentukan adalah skrip nyata yang pernah kamu pakai, lengkap dengan cara kamu memeriksa hasilnya.