Materi
number_format mengatur tampilan sel, bukan nilainya. Sel berisi 1250000 dengan cell.number_format = '"Rp"#,##0' tampil sebagai Rp1,250,000 atau Rp1.250.000 di Excel, tetapi .value tetap 1250000 dan tetap bisa dijumlahkan. Teks di dalam tanda kutip ganda ditampilkan apa adanya, dan koma di antara tanda # adalah pemisah ribuan. Tanda yang muncul — titik atau koma — mengikuti pengaturan bahasa dan wilayah komputer yang membuka berkas, menurut panduan format angka Microsoft.
Tanggal ditulis sebagai objek datetime.date, bukan teks. openpyxl memberi format bawaan yyyy-mm-dd, yang bisa diganti misalnya dengan 'dd/mm/yyyy'. Saat dibaca kembali, sel tanggal menghasilkan objek datetime.datetime.
import datetime
ws["B2"] = 487500
ws["B2"].number_format = '"Rp"#,##0'
ws["C2"] = datetime.date(2026, 11, 3)
print(ws["C2"].number_format) # yyyy-mm-dd
ws["C2"].number_format = "dd/mm/yyyy"Teks hasil ekspor harus diubah dulu
Banyak sistem kasir dan perbankan mengekspor nominal sebagai teks "Rp 1.250.000" dan tanggal sebagai teks "10/10/2026". Sel seperti itu bertipe teks (data_type "s"): SUM di Excel melewatinya dan pengurutan tanggal kacau. Ubah nominal dengan membuang "Rp", titik, dan spasi lalu int(); ubah tanggal dengan datetime.datetime.strptime(teks, "%d/%m/%Y").
Pesan error yang akan kamu temui: ValueError: time data '2026-10-10' does not match format '%d/%m/%Y' berarti pola strptime tidak sama dengan bentuk teksnya. ValueError: invalid literal for int() with base 10: 'Rp 875.000' berarti masih ada huruf atau titik yang belum dibuang.