Excel'de her gün aynı işlemleri tekrarlıyorsan Python ile bu işleri otomatikleştirebilirsin. Birden fazla dosyadaki verileri birleştirmek, rapor hazırlamak, belirli satırları filtrelemek veya çalışma sayfalarını düzenlemek için birkaç satır kod yeterli olabilir. Bu rehberde, günlük işlerde kullanabileceğin beş pratik Python ve Excel otomasyonu örneğini inceleyeceğiz.
Python ile Excel otomasyonu nedir?
Python ile Excel otomasyonu, Excel dosyalarında elle yaptığın tekrarlı işlemleri kod kullanarak gerçekleştirmektir. Örneğin her hafta farklı dosyalardan verileri kopyalayıp tek bir tabloya aktarıyor, belirli koşullara uyan satırları seçiyor veya aynı formatta rapor hazırlıyorsan bu işlemleri Python ile otomatikleştirebilirsin.
Bunun için en sık kullanılan iki kütüphane pandas ve openpyxl kütüphaneleridir.
- pandas: Verileri tablo halinde okumak, filtrelemek, birleştirmek, analiz etmek ve dışa aktarmak için kullanılır.
- openpyxl:
.xlsxdosyalarını düzenlemek, hücre değerlerini değiştirmek, biçimlendirme yapmak ve çalışma sayfalarını yönetmek için kullanılır.
Basit veri işlemleri için pandas iyi bir başlangıçtır. Hücre biçimleri veya belirli Excel özellikleri üzerinde çalışmak istediğinde openpyxl daha uygun olabilir.
Başlamadan önce gerekli kurulumu yap
Bilgisayarında Python kuruluysa terminal veya Komut İstemi üzerinden şu komutu çalıştır:
pip install pandas openpyxl
Kurulum tamamlandıktan sonra Python dosyanı oluşturabilir ve örnekleri çalıştırabilirsin.
Excel dosyalarının Python koduyla aynı klasörde bulunduğunu varsayacağız. Dosyaların farklı bir konumdaysa kod içindeki dosya yolunu kendi klasörüne göre değiştirmelisin.
1. Birden fazla Excel dosyasını tek dosyada birleştirmek
Diyelim ki her ay için ayrı bir Excel dosyası tutuyorsun. Ocak, şubat ve mart aylarına ait verileri tek bir tabloda toplamak istiyorsun.
Dosyaları tek tek açıp satırları kopyalamak yerine pandas kullanabilirsin.
Örnek dosyalar:
ocak.xlsxsubat.xlsxmart.xlsx
Her dosyada aynı sütunların bulunduğunu varsayalım.
import pandas as pd
dosyalar = ["ocak.xlsx", "subat.xlsx", "mart.xlsx"]
tablolar = []
for dosya in dosyalar:
tablo = pd.read_excel(dosya)
tablolar.append(tablo)
birlesik_tablo = pd.concat(tablolar, ignore_index=True)
birlesik_tablo.to_excel("birlesik_rapor.xlsx", index=False)
print("Excel dosyaları birleştirildi.")
Bu kod ne yapıyor?
- Belirtilen Excel dosyalarını sırayla okuyor.
- Her dosyanın verisini bir listeye ekliyor.
- Tabloları alt alta birleştiriyor.
- Sonucu
birlesik_rapor.xlsxdosyasına kaydediyor.
ignore_index=True, yeni tablodaki satır indekslerinin baştan oluşturulmasını sağlar. index=False ise pandas'ın kendi satır numaralarını Excel'e ayrı bir sütun olarak yazmasını önler.
Ne zaman kullanılır? Aylık satış raporları, farklı ekiplerden gelen listeler, stok tabloları ve düzenli olarak biriken operasyonel veriler için uygundur.
Bu örnekte dosyaların sütun yapılarının uyumlu olması önemlidir. Sütun adları farklıysa birleştirme öncesinde bunları standartlaştırmak daha doğru sonuç verir.
2. Belirli koşullara uyan satırları filtrelemek
Excel'de belirli bir tutarın üzerindeki satışları, belirli bir durumdaki kayıtları veya yalnızca seçtiğin kategoriye ait verileri bulmak isteyebilirsin.
Bunu Python ile otomatik olarak yapabilirsin.
Örneğin satislar.xlsx dosyasında Ürün, Tutar ve Durum sütunları bulunduğunu düşünelim.
import pandas as pd
df = pd.read_excel("satislar.xlsx")
filtrelenmis = df[
(df["Tutar"] >= 1000) &
(df["Durum"] == "Tamamlandı")
]
filtrelenmis.to_excel("filtrelenmis_satislar.xlsx", index=False)
print(f"Bulunan kayıt sayısı: {len(filtrelenmis)}")
Bu kod ne yapıyor?
Kod, tutarı en az 1000 olan ve durumu Tamamlandı olarak işaretlenen satırları seçiyor. Ardından sonuçları ayrı bir Excel dosyasına kaydediyor.
Buradaki & operatörü iki koşulun da sağlanmasını ister. Koşullardan herhangi birinin sağlanması yeterliyse | operatörünü kullanabilirsin.
Örneğin:
filtrelenmis = df[
(df["Tutar"] >= 1000) |
(df["Durum"] == "Beklemede")
]
Bu sürüm, tutarı 1000 veya üzerinde olan ya da durumu Beklemede olan kayıtları seçer.
Ne zaman kullanılır? Satış analizi, sipariş takibi, stok kontrolü, gider incelemesi ve belirli kriterlere göre liste hazırlama işlemlerinde kullanılabilir.
Not: Sütun adları Excel dosyasındaki adlarla birebir aynı olmalıdır. Büyük-küçük harf veya boşluk farkları kodun hata vermesine neden olabilir.
3. Excel dosyasından otomatik rapor oluşturmak
Her gün veya hafta aynı raporu hazırlıyorsan Python ile toplamları hesaplayıp sonuçları yeni bir Excel dosyasına aktarabilirsin.
Örneğin satış tablosundaki toplam tutarı ve kayıt sayısını hesaplayalım.
import pandas as pd
df = pd.read_excel("satislar.xlsx")
toplam_satis = df["Tutar"].sum()
kayit_sayisi = len(df)
ortalama_satis = df["Tutar"].mean()
rapor = pd.DataFrame({
"Metrik": [
"Toplam Satış",
"Kayıt Sayısı",
"Ortalama Satış"
],
"Değer": [
toplam_satis,
kayit_sayisi,
ortalama_satis
]
})
rapor.to_excel("satis_ozeti.xlsx", index=False)
print("Rapor oluşturuldu.")
Bu kod ne yapıyor?
sum()ile tutar sütunundaki değerleri topluyor.len()ile tablodaki kayıt sayısını hesaplıyor.mean()ile ortalama tutarı buluyor.- Hesaplanan değerleri yeni bir Excel raporuna aktarıyor.
Bu yapıyı ihtiyacına göre genişletebilirsin. Örneğin ürün kategorilerine göre toplam satışları hesaplamak için groupby() kullanabilirsin:
kategori_raporu = (
df.groupby("Kategori", as_index=False)["Tutar"]
.sum()
)
kategori_raporu.to_excel("kategori_raporu.xlsx", index=False)
Bu kod, her kategorinin toplam tutarını ayrı bir satırda gösterir.
Ne zaman kullanılır? Günlük satış özeti, haftalık performans raporu, gider tablosu, envanter raporu veya yöneticilere sunulan düzenli veri özetleri için kullanılabilir.
Burada önemli bir ayrıntı var: Boş veya metin biçiminde tutulmuş tutar değerleri hesaplamaları etkileyebilir. Gerçek dosyalarında verilerin sayısal formatta olduğundan emin olmalısın.
4. Excel hücrelerini düzenlemek ve biçimlendirmek
Bazı işlemler yalnızca veri analiziyle sınırlı değildir. Başlıkları kalınlaştırmak, sütun genişliklerini ayarlamak, hücre renklerini değiştirmek veya raporu daha okunaklı hale getirmek de gerekebilir.
Bu tür işler için openpyxl kullanabilirsin.
from openpyxl import load_workbook
from openpyxl.styles import Font, PatternFill, Alignment
dosya = "satis_ozeti.xlsx"
workbook = load_workbook(dosya)
sheet = workbook.active
for cell in sheet[1]:
cell.font = Font(bold=True, color="FFFFFF")
cell.fill = PatternFill(
fill_type="solid",
fgColor="17365D"
)
cell.alignment = Alignment(horizontal="center")
for column in sheet.columns:
max_length = 0
column_letter = column[0].column_letter
for cell in column:
if cell.value is not None:
max_length = max(max_length, len(str(cell.value)))
sheet.column_dimensions[column_letter].width = max_length + 2
workbook.save("duzenlenmis_rapor.xlsx")
print("Rapor biçimlendirildi.")
Bu kod ne yapıyor?
- Mevcut Excel dosyasını açıyor.
- İlk satırdaki hücreleri beyaz yazı ve koyu arka planla biçimlendiriyor.
- Başlıkları ortalıyor.
- Sütun genişliklerini içerik uzunluğuna göre ayarlıyor.
- Düzenlenmiş dosyayı yeni bir isimle kaydediyor.
Burada kaynak dosyanın üzerine yazmak yerine farklı bir dosyaya kayıt yapıyoruz. Böylece orijinal raporu koruyabilirsin.
Ne zaman kullanılır? Her hafta aynı formatta rapor hazırlıyorsan, farklı kaynaklardan gelen dosyaları ortak bir görünüme getirmek istiyorsan veya Excel çıktılarının elle düzenlenmesini azaltmayı hedefliyorsan kullanabilirsin.
Bu örnek temel hücre biçimlendirmesi yapar. Mevcut grafikler, karmaşık formüller veya gelişmiş Excel özellikleri bulunan dosyalarda değişiklik yapmadan önce bir kopya üzerinde test etmek iyi bir yaklaşımdır.
5. Bir klasördeki Excel dosyalarını otomatik işlemek
Önceki örneklerde dosya isimlerini tek tek yazdık. Peki bir klasörde onlarca Excel dosyası varsa ne olacak?
Python ile klasördeki .xlsx dosyalarını bulabilir, her birini okuyabilir ve sonuçları tek bir dosyada birleştirebilirsin.
from pathlib import Path
import pandas as pd
klasor = Path("excel_dosyalarim")
dosyalar = [
dosya
for dosya in klasor.glob("*.xlsx")
if not dosya.name.startswith("~$")
]
tablolar = []
for dosya in dosyalar:
try:
df = pd.read_excel(dosya)
df["Kaynak Dosya"] = dosya.name
tablolar.append(df)
print(f"İşlendi: {dosya.name}")
except Exception as hata:
print(f"Hata: {dosya.name} | {hata}")
if tablolar:
sonuc = pd.concat(tablolar, ignore_index=True)
sonuc.to_excel("tum_dosyalar.xlsx", index=False)
print("Tüm uygun dosyalar işlendi.")
else:
print("Birleştirilecek uygun Excel dosyası bulunamadı.")
Bu kod ne yapıyor?
- Belirtilen klasördeki
.xlsxdosyalarını listeliyor. - Excel'in geçici kilit dosyalarını atlıyor.
- Dosyaları sırayla okumaya çalışıyor.
- Her satıra verinin hangi dosyadan geldiğini belirten
Kaynak Dosyasütunu ekliyor. - Okunabilen tabloları birleştiriyor.
- Okunamayan dosyaları hata mesajıyla bildiriyor.
Kod, excel_dosyalarim klasörünün Python dosyanın bulunduğu konumda olduğunu varsayar. Farklı bir konum kullanıyorsan klasör yolunu güncellemelisin.
Bu örnek yalnızca .xlsx dosyalarını tarar. Eski .xls dosyaları, CSV dosyaları veya farklı çalışma sayfalarının özel olarak seçilmesi gerekiyorsa kodun buna göre genişletilmesi gerekir.
Ne zaman kullanılır? Düzenli olarak dosya teslim alan ekiplerde, aylık veri arşivlerinde, mağaza raporlarında ve farklı kaynaklardan gelen tabloların bir araya getirilmesinde oldukça kullanışlıdır.
Hangi durumda pandas, hangi durumda openpyxl kullanmalısın?
İki kütüphane birbirinin doğrudan alternatifi değildir. Seçim, yapmak istediğin işe bağlıdır.
| İşlem | Önerilen kütüphane |
|---|---|
| Excel dosyasını tablo olarak okumak | pandas |
| Satırları filtrelemek | pandas |
| Birden fazla tabloyu birleştirmek | pandas |
| Toplam ve ortalama hesaplamak | pandas |
| Hücre renklerini değiştirmek | openpyxl |
| Yazı tipi ve sütun genişliği ayarlamak | openpyxl |
| Belirli hücreleri düzenlemek | openpyxl |
| Veri işleme ve biçimlendirmeyi birlikte yapmak | İkisi birlikte |
Örneğin önce pandas ile satış verilerini filtreleyip özetleyebilir, ardından openpyxl ile oluşan raporun başlıklarını ve sütunlarını biçimlendirebilirsin.
Bu yaklaşım, veri işleme ile görsel düzenlemeyi birbirinden ayırmanı sağlar.
Python ile Excel otomasyonu yaparken dikkat etmen gerekenler
Otomasyon, doğru kurulduğunda zaman kazandırır. Ancak hatalı bir kod, yanlış verilerin rapora aktarılmasına veya mevcut dosyaların bozulmasına da neden olabilir.
Bu nedenle aşağıdaki noktalara dikkat et:
1. Orijinal dosyaları koru
İlk denemelerinde kaynak Excel dosyasının üzerine yazma. Sonuçları ayrı bir dosyaya kaydet ve çıktıları kontrol et.
2. Sütun adlarını doğrula
Kodun Tutar sütununu arıyorsa dosyada bu isim gerçekten bulunmalıdır. Beklenmeyen sütun adlarını kontrol etmek, hata ayıklamayı kolaylaştırır.
3. Boş ve hatalı verileri kontrol et
Eksik hücreler, metin olarak kaydedilmiş sayılar ve tutarsız tarih formatları hesaplamaları etkileyebilir. Veriyi işlemeden önce doğrulama adımı ekle.
4. Büyük dosyalarda performansı göz önünde bulundur
Çok büyük çalışma kitapları daha fazla bellek ve işlem süresi gerektirebilir. Dosyanın boyutuna göre yalnızca gerekli sütunları okumak veya veriyi parça parça işlemek daha uygun olabilir.
5. Otomasyonu gerçek verilerle test et
Önce küçük bir örnek dosyada çalıştır. Beklenen satır sayısını, toplamları ve çıktı formatını kontrol ettikten sonra asıl dosyalarına geç.
6. Hassas verileri koru
Müşteri bilgileri, finansal kayıtlar veya kişisel veriler içeren Excel dosyalarını işlerken erişim izinlerine dikkat et. Bu dosyaları gereksiz yere üçüncü taraf hizmetlere yükleme.
Excel otomasyonunu bir adım ileri taşımak
Bu beş örnek, Python ile Excel işlerini otomatikleştirmeye başlamak için yeterlidir. Ancak otomasyonun kapsamı bunlarla sınırlı değil.
İhtiyacına göre şu özellikleri de ekleyebilirsin:
- Zamanlanmış raporlama: Belirli saatlerde çalışan bir görevle rapor oluşturmak.
- E-posta gönderimi: Hazırlanan raporu belirli alıcılara otomatik iletmek.
- Veri doğrulama: Eksik, hatalı veya beklenmeyen kayıtları tespit etmek.
- Birden fazla kaynak: Excel, CSV ve veritabanlarından gelen verileri bir araya getirmek.
- Bildirim sistemi: İşlem başarısız olduğunda hata mesajı veya bildirim göndermek.
Daha kapsamlı projelerde bu işlemler bir Python betiği, zamanlayıcı ve loglama mekanizmasıyla birleştirilebilir. Böylece yalnızca tek seferlik bir kod değil, düzenli olarak çalışan ve kontrol edilebilen bir otomasyon oluşturursun.
Python ile bot ve otomasyon geliştirme seçeneklerini incelemek istersen Python botları ve otomasyon hizmetleri sayfasına göz atabilirsin.
Sonuç
Python ile Excel otomasyonu, sürekli tekrarlanan veri işlemlerini azaltmak ve daha tutarlı raporlar hazırlamak için pratik bir yöntemdir. Birden fazla dosyayı birleştirmekten koşullu filtrelemeye, rapor oluşturmaktan hücre biçimlendirmeye kadar birçok işlem birkaç satır kodla yapılabilir.
Başlangıç için pandas ile dosya okuma ve filtreleme işlemlerini öğrenmeni, ardından openpyxl ile hücre biçimlendirme özelliklerine geçmeni öneririm. Önce küçük bir dosyada deneme yap, çıktıları kontrol et ve ihtiyacına göre otomasyonu genişlet.
Elle yaptığın bir Excel işlemini her gün veya her hafta tekrarlıyorsan şu soruyu sor: Bu işlemi Python'a bir kez yaptırıp sonraki tekrarları otomatikleştirebilir miyim? Çoğu zaman iyi bir otomasyon fikri tam da burada başlar.
