Materi
Berkas hasil to_excel berisi nilai yang benar tetapi tampilannya polos: angka tanpa pemisah ribuan, lebar kolom bawaan 13 sehingga nama produk panjang terpotong, dan di pandas versi kelas ini judul kolom tidak ditebalkan. Polanya dua langkah: tulis dengan pandas, lalu buka berkas itu dengan load_workbook, atur gayanya dengan alat modul 2, dan simpan.
df.to_excel("gaji.xlsx", sheet_name="Gaji", index=False)
wb = load_workbook("gaji.xlsx")
ws = wb["Gaji"]
for (sel,) in ws.iter_rows(min_row=2, min_col=3, max_col=3):
sel.number_format = '"Rp"#,##0'
ws.freeze_panes = "A2"
wb.save("gaji.xlsx")Lebar kolom yang pas dihitung dari isinya: untuk setiap kolom, ambil panjang teks terpanjang — judul maupun data — lalu tambahkan sedikit ruang. ws.iter_cols() memberi sel per kolom, dan get_column_letter mengubah nomor kolom menjadi huruf untuk column_dimensions. Angka dihitung panjangnya setelah diubah dengan str().
to_excel juga punya argumen freeze_panes berupa pasangan (baris, kolom): (1, 0) membekukan baris pertama. Untuk format angka dan lebar kolom tetap dibutuhkan openpyxl.
Kesalahan yang sering terjadi
Memformat kolom menurut huruf tetap, misalnya selalu kolom C, lalu bulan depan urutan kolom DataFrame berubah dan format Rupiah jatuh di kolom jumlah unit. Cari kolomnya dari teks judul di baris 1. Lupa wb.save di akhir membuat semua gaya hilang tanpa pesan apa pun.