Materi
Membaca sel satu per satu tidak praktis untuk tabel ratusan baris. ws.iter_rows() menghasilkan satu baris setiap putaran perulangan. Dengan values_only=True setiap baris berupa tuple berisi nilai sel; tanpa argumen itu, isinya objek Cell yang nilainya masih harus diambil dengan .value. Argumen min_row=2 melewati baris judul kolom, dan max_col membatasi berapa kolom yang dibaca. ws.max_row adalah nomor baris terakhir yang berisi data.
Tuple bisa langsung dibongkar ke beberapa nama variabel di baris for, sehingga kode terbaca seperti nama kolomnya sendiri.
ws = load_workbook("absensi.xlsx")["Oktober"]
for nama, hadir, cuti in ws.iter_rows(min_row=2, values_only=True):
print(nama, hadir + cuti)
# Ayu 22
# Bima 21Sel yang tidak diisi terbaca None. Baris yang seluruhnya kosong di tengah tabel tetap ikut muncul sebagai tuple berisi None, karena iter_rows berjalan dari min_row sampai max_row tanpa melompati apa pun. Pemeriksaan if jumlah is None: continue melewati baris seperti itu sebelum dihitung.
Pesan error yang akan kamu temui
TypeError: unsupported operand type(s) for +: 'int' and 'NoneType' berarti ada sel kosong yang ikut dijumlahkan. TypeError: unsupported operand type(s) for *: 'Cell' and 'int' berarti values_only=True terlupa, sehingga yang dikalikan objek sel. ValueError: too many values to unpack (expected 3) berarti sheet punya lebih banyak kolom daripada nama variabel di baris for; tambahkan max_col=3.