Materi
Rumus ditulis sebagai teks yang diawali tanda sama dengan: ws["D2"] = "=B2*C2". openpyxl menyimpan teks itu apa adanya dan tidak menghitungnya; Excel yang menghitung saat berkas dibuka. Keuntungannya, rumus tetap hidup: bila atasan mengubah satu angka di Excel, subtotal dan total ikut menyesuaikan, sesuatu yang tidak terjadi bila skrip menulis angka hasil hitungan Python.
Rumus per baris dibuat dengan f-string di dalam perulangan nomor baris. Baris total ditulis setelah baris data terakhir, dan nomornya dihitung dari ws.max_row, sehingga skrip yang sama tetap benar bulan depan saat jumlah barisnya berbeda. Bila nomor kolom yang dihitung, get_column_letter(4) dari openpyxl.utils mengubahnya menjadi huruf "D".
ws = load_workbook("lembur.xlsx")["Lembur"]
akhir = ws.max_row # 4: tiga pegawai + judul
for r in range(2, akhir + 1):
ws[f"D{r}"] = f"=B{r}*C{r}" # jam lembur x tarif per jam
ws[f"A{akhir + 1}"] = "Total"
ws[f"D{akhir + 1}"] = f"=SUM(D2:D{akhir})"Nama fungsi Inggris, pemisah koma
Excel berbahasa Indonesia menampilkan =JUMLAH(B2;B5), tetapi berkas .xlsx selalu menyimpan nama fungsi bahasa Inggris dengan argumen yang dipisah koma. Dokumentasi openpyxl mewajibkan bentuk itu. Skrip yang menulis =JUMLAH(B2:B5) atau =SUM(B2;B5) tetap tersimpan tanpa error di Python; kesalahannya baru terlihat saat berkas dibuka di Excel. Teks rumus tanpa tanda = di depan disimpan sebagai teks biasa.