Excel Raporu Oluşturmak ve Biçimlendirmek

Önceki derste (4/8) var olan Excel dosyalarını Python ile açıp satır satır okumayı, hücrelerdeki verilere erişmeyi öğrendik. Bu derste yönü tersine çeviriyoruz: elimizdeki verilerden sıfırdan yeni bir Excel dosyası üretecek, başlık satırını göze hoş görünecek şekilde biçimlendirecek ve toplam gibi basit hesapları Excel'in kendisine yaptıracağız.

Bu derste ne yapacağız?

Hedefimiz, Python'da openpyxl kütüphanesini kullanarak sıfırdan bir .xlsx dosyası oluşturmak; başlık satırına kalın yazı tipi, arka plan rengi ve ortalanmış hizalama uygulamak; sütun genişliklerini okunur hale getirmek ve SUM (TOPLA) gibi bir Excel formülünü hücreye yazdırmaktır. Ders sonunda elinizde, çift tıklayınca Excel veya LibreOffice Calc'ta düzgün görünen, otomatik hesaplama yapan gerçek bir rapor dosyası olacak.

Ön koşul olarak bilgisayarınızda Python'un kurulu olması, bir önceki derste gördüğümüz temel liste ve döngü kullanımını hatırlamanız ve openpyxl kütüphanesinin kurulu olması gerekir. Kurulu değilse, adım adım uygulama bölümünün ilk maddesinde kurulumu birlikte yapacağız.

Kavram

Bir Excel dosyasını, içinde birden çok sayfa (yaprak) bulunan bir defter gibi düşünebilirsiniz. openpyxl dünyasında bu deftere çalışma kitabı (workbook) denir; defterin içindeki her bir yaprağa ise çalışma sayfası (worksheet) denir. Bir sayfadaki her kutucuk, yani satır ve sütunun kesiştiği yer, hücre olarak adlandırılır ve A1, B2 gibi bir adresle anılır.

Python içinde openpyxl kütüphanesi, elinize verilen bir kalem gibidir: boş bir defter (workbook) açar, üzerine sayfa adı yazar, hücrelere veri ve biçim bilgisi (yazı tipi, renk, hizalama) işler ve sonunda o defteri diske gerçek bir .xlsx dosyası olarak kaydeder.

Formül konusuna gelince: openpyxl bir hesap makinesi değildir, sadece bir "not bırakma" aracıdır. Bir hücreye =SUM(B2:B10) gibi bir metin yazdığınızda, openpyxl bunu olduğu gibi hücreye yerleştirir; gerçek toplama işlemini siz dosyayı Excel veya LibreOffice Calc'ta açtığınızda program kendisi yapar. Bu, bir öğretmene sınav kağıdının üzerine "bu sütunu topla" notunu bırakmaya benzer: notu siz yazarsınız, toplamayı öğretmen (yani Excel) yapar.

Adım adım uygulama

  • 1. Adım: Öncelikle openpyxl kütüphanesinin kurulu olduğundan emin olun. Terminali (Komut İstemi, PowerShell veya VS Code'un içindeki terminal) açın ve şu satırı yazıp Enter'a basın: pip install openpyxl. Kurulum birkaç saniye sürer ve "Successfully installed" gibi bir mesajla biter.
  • 2. Adım: Bir kod düzenleyicide (örneğin VS Code) yeni bir Python dosyası oluşturun ve rapor_olustur.py adıyla kaydedin.
  • 3. Adım: Dosyanın en üstüne, ihtiyacımız olan sınıfları openpyxl kütüphanesinden içe aktarın: from openpyxl import Workbook ve from openpyxl.styles import Font, PatternFill, Alignment. Bu satırlar, birazdan kullanacağımız çalışma kitabı, yazı tipi, dolgu rengi ve hizalama araçlarını Python'a tanıtır.
  • 4. Adım: Yeni bir çalışma kitabı ve onun aktif sayfasını oluşturun: wb = Workbook() satırı boş bir Excel dosyası nesnesi üretir; ws = wb.active o dosyanın ilk sayfasını size verir; ws.title = "Satış Raporu" satırı ise bu sayfanın adını değiştirir. Böylece Excel'i açtığınızda sekmede "Sayfa1" yerine "Satış Raporu" yazdığını görürsünüz.
  • 5. Adım: Başlık satırını yazın. Önce bir liste oluşturun: headers = ["Ürün", "Adet", "Birim Fiyat", "Toplam"]. Ardından ws.append(headers) satırıyla bu listeyi sayfanın ilk boş satırına, yani birinci satıra ekleyin. append() metodu, kendisine verilen listedeki her elemanı sırasıyla bir sonraki sütuna yerleştirir.
  • 6. Adım: Ürün verilerini bir liste içinde tanımlayın, örneğin veriler = [("Kalem", 120, 3.5), ("Defter", 80, 12), ("Silgi", 200, 1.25)]. Ardından bir döngüyle bu verileri satır satır sayfaya ekleyin ve her satırın Toplam sütununa bir çarpma formülü yazdırın: satir_no değişkenini 2'den başlatın (çünkü 1. satır başlıklara ait), döngü içinde ws.append([urun, adet, fiyat]) ile ürün, adet ve fiyatı yazın; hemen ardından ws.cell(row=satir_no, column=4, value=f"=B{satir_no}*C{satir_no}") satırıyla dördüncü sütuna, o satırdaki adet ile birim fiyatı çarpan bir formül yerleştirin; döngü sonunda satir_no değerini bir artırın.
  • 7. Adım: Tüm ürünler eklendikten sonra, altına bir Genel Toplam satırı ekleyin. ws.append(["Genel Toplam", "", "", f"=SUM(D2:D{satir_no-1})"]) satırı, Toplam sütunundaki (D sütunu) tüm değerleri Excel'in kendisine topluluğu bir formülle hesaplatır.
  • 8. Adım: Başlık satırını biçimlendirin. Önce üç ayrı stil nesnesi tanımlayın: baslik_fontu = Font(bold=True, color="FFFFFF", size=12) beyaz renkli ve kalın bir yazı tipi oluşturur; baslik_dolgu = PatternFill(start_color="4472C4", end_color="4472C4", fill_type="solid") koyu mavi bir arka plan rengi oluşturur; baslik_hizalama = Alignment(horizontal="center", vertical="center") metni ortalar. Ardından for hucre in ws[1]: döngüsüyle birinci satırdaki her hücreye tek tek hucre.font, hucre.fill ve hucre.alignment özelliklerini atayın.
  • 9. Adım: Sütun genişliklerini okunur hale getirin. ws.column_dimensions["A"].width = 20, ws.column_dimensions["B"].width = 10, ws.column_dimensions["C"].width = 14 ve ws.column_dimensions["D"].width = 14 satırlarıyla her sütuna uygun bir genişlik verin; böylece uzun ürün adları veya formül sonuçları hücre sınırlarını taşmaz.
  • 10. Adım: Dosyayı diske kaydedin: wb.save("satis_raporu.xlsx"). Bu satır, o ana kadar bellekte hazırladığınız çalışma kitabını gerçek bir dosyaya dönüştürüp kaydeder.
  • 11. Adım: Terminalde python rapor_olustur.py yazıp Enter'a basarak betiği çalıştırın. Aynı klasörde oluşan satis_raporu.xlsx dosyasını çift tıklayarak Excel veya LibreOffice Calc ile açın; başlık satırının koyu mavi arka planla ve beyaz kalın yazıyla göründüğünü, Toplam sütunundaki hücrelere tıkladığınızda üst formül çubuğunda örneğin =B2*C2 yazdığını ve Genel Toplam hücresinde =SUM(D2:D4) formülünün doğru sonucu verdiğini kontrol edin. Menü adları ve görünüm, kullandığınız Excel veya LibreOffice Calc sürümüne göre küçük farklılıklar gösterebilir.

Sık karşılaşılan sorunlar

Hata / BelirtiOlası NedenÇözüm
ModuleNotFoundError: No module named 'openpyxl'Kütüphane hiç kurulmamış ya da yanlış Python ortamına kurulmuşTerminalde pip install openpyxl komutunu, betiği çalıştırdığınız sanal ortamda tekrar çalıştırın
PermissionError: [Errno 13] Permission deniedKaydetmeye çalıştığınız satis_raporu.xlsx dosyası Excel'de açık durumdaDosyayı Excel veya Calc'ta kapatıp betiği tekrar çalıştırın
Formül hücresinde sonuç yerine metin görünüyorFormül metninin başında eşittir işareti eksik ya da hücre biçimi "Metin" olarak ayarlıFormül dizesinin =B2*C2 gibi mutlaka = ile başladığından emin olun; hücre biçimini Genel veya Sayı yapın
Veriler beklenmedik sütunlara düşüyorappend() metoduna verilen listenin eleman sırası başlık sırasıyla uyuşmuyorListedeki her elemanın, ilgili başlık sütunuyla aynı sırada olduğunu kontrol edin
PatternFill veya Font satırında hata alınıyorRenk kodu yanlış biçimde yazılmış (başında # işareti veya eksik karakter)Renk kodunu "4472C4" gibi tırnak içinde, başında # olmadan ve altı karakter uzunluğunda yazın

Mini görev

Kendi başınıza, Aylık Gider Takibi adında küçük bir Excel raporu oluşturun. Sayfa; Gider Kalemi, Kategori ve Tutar başlıklı üç sütundan oluşsun, en az beş satır gerçek veya kurgusal veri içersin, en altta bir Genel Toplam satırı ve bu satırda Tutar sütununu toplayan bir SUM formülü bulunsun. Başlık satırını renkli, kalın ve ortalanmış biçimlendirin; sütun genişliklerini de metinlerin taşmayacağı şekilde ayarlayın.

Kontrol listesi:

  • Dosya .xlsx uzantısıyla, örneğin aylik_gider.xlsx adıyla kaydedildi mi?
  • Başlık satırı kalın yazı tipine ve renkli bir arka plana sahip mi?
  • Sayfada en az beş veri satırı var mı?
  • Genel Toplam satırında elle hesaplanmış bir sayı yerine =SUM(...) formülü kullanıldı mı?
  • Sütun genişlikleri, hiçbir metin veya sayı taşmayacak şekilde ayarlandı mı?
  • Dosya Excel veya LibreOffice Calc'ta hatasız açılıyor ve formül doğru sonucu veriyor mu?

Kendini sına

1. openpyxl kütüphanesinde yeni ve boş bir çalışma kitabı (workbook) oluşturmak için hangi satır yazılır?

2. ws.append() metodu tam olarak ne işe yarar?

3. Bir hücreye kalın (bold) yazı tipi uygulamak için Font sınıfı mı yoksa Alignment sınıfı mı kullanılır?

4. D2'den D10'a kadar olan hücrelerin toplamını aldıran bir Excel formülü nasıl yazılır?

5. openpyxl ile hazırladığınız çalışma kitabını diske gerçek bir dosya olarak kaydetmek için hangi metot çağrılır?

Cevaplar

1. wb = Workbook() satırıyla boş bir çalışma kitabı oluşturulur.

2. ws.append() metodu, kendisine verilen listedeki değerleri sayfanın bir sonraki boş satırına, sütun sütun sırasıyla ekler.

3. Kalın yazı tipi için Font sınıfı kullanılır, örneğin Font(bold=True); Alignment sınıfı ise metnin hücre içindeki hizasını (ortalama, sola/sağa yaslama) belirler.

4. =SUM(D2:D10) formülü, D2'den D10'a kadar olan hücrelerin toplamını verir.

5. wb.save("dosya_adi.xlsx") metodu çağrılarak çalışma kitabı diske kaydedilir.

Bir sonraki derste (6/8) artık elde tuttuğumuz bu rapor üretme becerisini bir adım öteye taşıyacağız: web sayfalarından güncel veri çekmenin temellerini öğrenip, o verileri doğrudan bugün öğrendiğiniz biçimlendirilmiş Excel raporlarına aktaracağız.

Bu dersi kayıt olmadan izleyebilirsin. İlerlemeni kaydetmek, sertifika almak ve puan tablosuna girmek için ücretsiz üye ol: Kayıt Ol