Ana içeriğe atla

openpyxl: Excel Görevlerini Python ile Otomatikleştirin

openpyxl kullanarak Excel dosyalarını okuma, yazma ve biçimlendirmeyi öğrenin. Modern Excel formatları (.xlsx) ve gelişmiş özelliklerle çalışma için pratik örnekler keşfedin.
Güncel 22 Nis 2026  · 8 dk. oku

openpyxl, Excel 2007 ile tanıtılan modern XML tabanlı formatlardaki (.xlsx, .xlsm) Excel dosyalarını okumanıza ve yazmanıza olanak tanıyan verimli bir Python kütüphanesidir; Excel 2010'dan itibaren gelişmiş özelliklere tam destek sunar. Başlangıçta PHPExcel'in Python uyarlaması olarak geliştirildi ve aktif bir geliştirici topluluğu tarafından bakım görmeye devam ediyor. Kütüphane, veri otomasyonu, raporlama ve biçimlendirme iş akışlarında öne çıkar; Excel dosyalarıyla çalışması gereken ancak sistemlerinde Excel yüklü olmayan kullanıcılar için özellikle faydalıdır.

Birçok kuruluş, finansal raporları otomatikleştirmek, veritabanı dışa aktarımlarından grafikler oluşturmak ve pazarlama raporlarına formüller ile biçimlendirme uygulamak için openpyxl kullanır. Bu kütüphane, tamamıyla Python kodu aracılığıyla Excel dosyaları üzerinde ince ayar kontrolü sunar.

openpyxl Nedir?

openpyxl, özellikle Excel 2010+ formatlarına yerel destek sağlamak üzere tasarlanmıştır. Kütüphane birkaç dosya formatıyla çalışır:

  •  .xlsx - Excel çalışma kitabı

  •  .xlsm - Makrolu Excel çalışma kitabı

  •  .xltx - Excel şablonu

  •  .xltm - Makrolu Excel şablonu

openpyxl'in en büyük avantajlarından biri, bilgisayarınıza Excel'in kurulu olmasını gerektirmemesidir. Bu da onu sunucu ortamları, otomatik raporlama sistemleri ve veri işleme hatları için ideal kılar. pandas dahil olmak üzere çeşitli Python kütüphaneleri, Excel arayüzü olarak openpyxl'i kullanır; bu da onun güvenilirliğini ve işlevselliğini gösterir.

openpyxl'in Kurulumu ve İçe Aktarımı

openpyxl'i pip ile kurmak oldukça basittir:

pip install openpyxl

Güvenilmeyen kaynaklardan gelen dosyalarla çalışırken güvenliği artırmak için isteğe bağlı defusedxml paketini de kurabilirsiniz:

pip install defusedxml

openpyxl'i Python betiklerinizde kullanmak için gerekli sınıfları içe aktarın:

from openpyxl import Workbook, load_workbook

Temel Kavramlar ve Terminoloji

openpyxl'i etkili kullanmak için temel Excel yapısını anlamanız gerekir:

  • Workbook: Bir veya daha fazla çalışma sayfası içeren Excel dosyasının kendisi
  • Worksheet: Bir çalışma kitabındaki tekil sekmeler/sayfalar
  • Cell: Sütun harfi ve satır numarasıyla tanımlanan (ör. "A1") bir çalışma sayfasındaki tekil veri noktası
  • Row: Sayılarla (1, 2, 3...) tanımlanan yatay hücre dizisi
  • Column: Harflerle (A, B, C...) tanımlanan dikey hücre dizisi

openpyxl'de hücrelere şu iki yöntemle başvurabilirsiniz:

  • Excel biçemi referanslar: sheet[“A1”]

  • Satır-sütun indeksleme: sheet.cell(row=1, column=1) (Not: openpyxl, 0 tabanlı değil, 1 tabanlı indeksleme kullanır)

openpyxl ile Excel Dosyalarını Okuma

İşte bir Excel dosyasından veri okumayı gösteren pratik bir örnek:

Bir çalışma kitabını yükleyin ve keşfedin

from openpyxl import load_workbook

# Load the workbook - use read_only=True for large files
wb = load_workbook('sample.xlsx', read_only=False, data_only=False)
# data_only=True reads values instead of formulas

İsteğe bağlı parametreler, çalışma kitabının nasıl yükleneceğini kontrol eder:

  • read_only=True büyük dosyalar için performansı artırır ancak düzenleme yeteneklerini sınırlar

  • data_only=True formüller yerine hesaplanan değerleri döndürür

Veriler arasında yineleme yapın

Birden çok hücreyi verimli bir şekilde işlemek için yineleme yöntemlerini kullanın:

# Iterate through rows
for row in sheet.iter_rows(min_row=1, max_row=5, values_only=True):
    print(row)  # Returns a tuple of values

# Iterate through columns
for column in sheet.iter_cols(min_col=1, max_col=3, values_only=True):
    print(column)  # Returns a tuple of values

# Access a range of cells
cell_range = sheet["A1:C5"]
for row in cell_range:
    for cell in row:
        print(cell.value)

Python veri yapılarına dönüştürün

Excel verilerini Python veri yapılarına kolayca dönüştürebilirsiniz:

# Convert worksheet data to a list of dictionaries
def sheet_to_dict(sheet):
    data = []
    headers = [cell.value for cell in sheet[1]]  # First row as headers
    
    for row in sheet.iter_rows(min_row=2, values_only=True):
        row_data = {}
        for key, value in zip(headers, row):
            row_data[key] = value
        data.append(row_data)
    
    return data

# Example usage
data_dict = sheet_to_dict(sheet)
print(data_dict)

openpyxl ile Excel Dosyalarına Yazma

openpyxl ile Excel dosyaları oluşturmak ve değiştirmek de aynı derecede kolaydır.

Bir çalışma kitabı oluşturun ve temel veriler yazın

from openpyxl import Workbook

# Create a new workbook
wb = Workbook()
sheet = wb.active

# Rename the sheet
sheet.title = "Data"

# Write values to cells
sheet["A1"] = "Name"
sheet["B1"] = "Age"
sheet["C1"] = "City"

# Add data
data = [
    ["Alice", 25, "New York"],
    ["Bob", 30, "San Francisco"],
    ["Charlie", 35, "Chicago"]
]

for row_idx, row_data in enumerate(data, start=2):
    for col_idx, cell_value in enumerate(row_data, start=1):
        sheet.cell(row=row_idx, column=col_idx, value=cell_value)

# Save the workbook
wb.save("new_workbook.xlsx")

Mevcut Excel dosyalarını değiştirin

from openpyxl import load_workbook

# Load an existing workbook
wb = load_workbook("existing_file.xlsx")
sheet = wb.active

# Modify cell values
sheet["D1"] = "Updated Data"
sheet.cell(row=5, column=2).value = 42

# Save to a new file (to preserve the original)
wb.save("modified_file.xlsx")

Verileri dinamik olarak ekleyin

.append() yöntemi yeni satırlar eklemeyi kolaylaştırır:

from openpyxl import Workbook

wb = Workbook()
sheet = wb.active

# Add headers
sheet.append(["Date", "Product", "Quantity", "Price"])

# Add multiple rows of data
sales_data = [
    ["2025-04-01", "Laptop", 5, 1200],
    ["2025-04-01", "Mouse", 10, 25],
    ["2025-04-02", "Monitor", 3, 350]
]

for row in sales_data:
    sheet.append(row)

wb.save("sales_report.xlsx")

Excel'de Biçimlendirme ve Stil

openpyxl, hücre biçimlendirme ve stillendirme için kapsamlı seçenekler sunar.

Yazı tipleri, kenarlıklar ve hizalama ekleyin

from openpyxl import Workbook
from openpyxl.styles import Font, Alignment, Border, Side, PatternFill, NamedStyle

wb = Workbook()
sheet = wb.active

# Create a header style
header_style = NamedStyle(name="header_style")
header_style.font = Font(bold=True, size=12, color="FFFFFF")
header_style.fill = PatternFill(fill_type="solid", start_color="366092")
header_style.alignment = Alignment(horizontal="center", vertical="center")
header_style.border = Border(
    bottom=Side(border_style="medium", color="000000"),
    left=Side(border_style="thin"),
    right=Side(border_style="thin"),
    top=Side(border_style="thin")
)

# Add the style to the workbook
wb.add_named_style(header_style)

# Apply the style to header row
headers = ["ID", "Product", "Category", "Price"]
for col_idx, header in enumerate(headers, start=1):
    cell = sheet.cell(row=1, column=col_idx, value=header)
    cell.style = "header_style"

# Basic styling without named styles
sheet["A2"].font = Font(bold=True, italic=True)
sheet["A3"].alignment = Alignment(horizontal="center")
sheet["A4"].border = Border(bottom=Side(border_style="thin"))

wb.save("styled_workbook.xlsx")

Koşullu biçimlendirme

Koşullu biçimlendirme, hücre değerlerine göre stiller uygulamanıza olanak tanır:

from openpyxl import Workbook
from openpyxl.styles import Font, PatternFill
from openpyxl.styles.differential import DifferentialStyle
from openpyxl.formatting.rule import Rule, ColorScaleRule

wb = Workbook()
sheet = wb.active

# Add sample data
for row in range(1, 11):
    for col in range(1, 5):
        sheet.cell(row=row, column=col, value=(row-1)*4 + col)

# Add color scale (green to red gradient)
color_scale = ColorScaleRule(
    start_type="min", start_color="63BE7B",  # Green
    mid_type="percentile", mid_value=50, mid_color="FFEB84",  # Yellow
    end_type="max", end_color="F8696B"  # Red
)
sheet.conditional_formatting.add("A1:D10", color_scale)

# Add a rule for values less than 5
red_text = Font(color="FF0000")
red_fill = PatternFill(start_color="FFCCCC", end_color="FFCCCC", fill_type="solid")
dxf = DifferentialStyle(font=red_text, fill=red_fill)
rule = Rule(type="cellIs", operator="lessThan", formula=["5"], dxf=dxf)
sheet.conditional_formatting.add("A1:D10", rule)

wb.save("conditional_format.xlsx")

Gelişmiş Özellikler

openpyxl, karmaşık elektronik tablo görevlerine yardımcı olan birçok gelişmiş Excel özelliğini destekler.

Formül ekleme

from openpyxl import Workbook

wb = Workbook()
sheet = wb.active

# Add data
for row in range(1, 6):
    sheet.cell(row=row, column=1, value=row)

# Add formulas
sheet["B1"] = "=A1*2"
sheet["B2"] = "=A2*2"
sheet["C1"] = "=SUM(A1:A5)"
sheet["C2"] = "=AVERAGE(A1:A5)"
sheet["C3"] = "=COUNTIF(A1:A5,\">2\")"

wb.save("formulas.xlsx")

Not: load_workbook() kullanıldığında formüller openpyxl tarafından otomatik olarak hesaplanmaz. Hesaplanan değerleri görmek için load_workbook(“file.xlsx”, data_only=True) kullanın.  

Grafik ekleme

openpyxl çeşitli grafik türleri oluşturabilir:

from openpyxl import Workbook
from openpyxl.chart import BarChart, LineChart, Reference

wb = Workbook()
sheet = wb.active

# Add data
months = ["Jan", "Feb", "Mar", "Apr", "May"]
values = [30, 45, 37, 50, 62]

for i, (month, value) in enumerate(zip(months, values), start=1):
    sheet.cell(row=i, column=1, value=month)
    sheet.cell(row=i, column=2, value=value)

# Create a bar chart
bar_chart = BarChart()
bar_chart.title = "Monthly Sales"
bar_chart.x_axis.title = "Month"
bar_chart.y_axis.title = "Sales"

# Define the data range
data = Reference(sheet, min_col=2, min_row=1, max_row=5)
categories = Reference(sheet, min_col=1, min_row=1, max_row=5)

# Add the data to the chart
bar_chart.add_data(data)
bar_chart.set_categories(categories)

# Add the chart to the worksheet
sheet.add_chart(bar_chart, "D1")

# Create a line chart on the same data
line_chart = LineChart()
line_chart.title = "Monthly Sales Trend"
line_chart.add_data(data)
line_chart.set_categories(categories)
sheet.add_chart(line_chart, "D15")

wb.save("charts.xlsx")

Görsel ekleme

from openpyxl import Workbook
from openpyxl.drawing.image import Image

wb = Workbook()
sheet = wb.active

# Add an image
img = Image("logo.png")

# Resize the image (optional)
img.width = 150
img.height = 75

# Add the image to cell A1
sheet.add_image(img, "A1")

wb.save("with_image.xlsx")

Not: Görsellerle çalışmak için Pillow kütüphanesinin kurulu olması gerekir: pip install pillow

Sayfa, Satır ve Sütun Yönetimi

openpyxl, Excel dosyalarınızın yapısını yönetmek için işlevler sağlar:

Sayfa oluşturma ve kaldırma

from openpyxl import Workbook

wb = Workbook()

# Create new sheets
wb.create_sheet("Data")
wb.create_sheet("Summary", 0)  # Add at the beginning

# Remove a sheet
wb.remove(wb["Sheet"])  # Remove the default sheet

print(wb.sheetnames)  # ['Summary', 'Data']

wb.save("multiple_sheets.xlsx")

Sayfaları yeniden adlandırma

wb = Workbook()
sheet = wb.active
sheet.title = "Sales Report"
wb.save("renamed_sheet.xlsx")

Çalışma sayfalarını kopyalama

from openpyxl import Workbook

wb = Workbook()
source = wb.active
source.title = "Original"

# Add some data to copy
source["A1"] = "Test Data"

# Create a copy
wb.copy_worksheet(source)

# The copied sheet will have "Copy of Original" name
wb.save("copied_sheet.xlsx")

Satır ve sütun ekleme/silme

from openpyxl import Workbook

wb = Workbook()
sheet = wb.active

# Add some data
for i in range(1, 6):
    for j in range(1, 4):
        sheet.cell(row=i, column=j, value=f"R{i}C{j}")

# Insert a row at position 2
sheet.insert_rows(2)

# Insert multiple rows
sheet.insert_rows(5, 3)  # Insert 3 rows at position 5

# Insert a column at position 2
sheet.insert_cols(2)

# Delete rows
sheet.delete_rows(7, 2)  # Delete 2 rows starting at row 7

# Delete columns
sheet.delete_cols(3)  # Delete column C

wb.save("modified_structure.xlsx")

Bölmeleri dondurma ve filtre ekleme

from openpyxl import Workbook

wb = Workbook()
sheet = wb.active

# Add headers
headers = ["ID", "Name", "Department", "Salary"]
for col_idx, header in enumerate(headers, start=1):
    sheet.cell(row=1, column=col_idx, value=header)

# Add data
data = [
    [1, "John Smith", "HR", 55000],
    [2, "Jane Doe", "IT", 65000],
    [3, "Bob Johnson", "Finance", 60000]
]
for row_idx, row_data in enumerate(data, start=2):
    for col_idx, value in enumerate(row_data, start=1):
        sheet.cell(row=row_idx, column=col_idx, value=value)

# Freeze the header row
sheet.freeze_panes = "A2"

# Add autofilter
sheet.auto_filter.ref = "A1:D4"

wb.save("freeze_and_filter.xlsx")

Sınırlamalar ve Topluluk Geri Bildirimi

openpyxl zengin özelliklere sahip olsa da kullanıcılar bazı sınırlamalara dikkat çekmiştir:

  • Adlandırılmış aralıklar için sınırlı destek
  • Gelişmiş özellikler için dokümantasyon örnekleri sınırlı olabilir
  • Çok büyük dosyalar için performans yavaş olabilir (read-only modu yardımcı olur)

Bu sınırlamalara rağmen openpyxl güçlü bir topluluk desteğine sahiptir. Sorunlar GitLab takipçisinde bildirilebilir ve zaman zaman profesyonel destek mevcuttur. Daha fazla bilgi ve yardım için şu kaynaklara başvurabilirsiniz:

Sonuç

openpyxl, Excel dosyalarını okumak, yazmak ve biçimlendirmek için eksiksiz destek sunan, Python tabanlı Excel otomasyonu için yerleşik bir kütüphanedir. Otomatik iş akışlarında, tek tek hücreleri değiştirmekten grafikler oluşturmaya ve karmaşık biçimlendirmeler uygulamaya kadar elektronik tablo çıktısı üzerinde ayrıntılı kontrol sağlar.

Özellikle rapor oluştururken veya tabular verileri işlerken Excel dosyalarını programatik olarak üretmesi ya da analiz etmesi gereken kullanıcılar için openpyxl kapsamlı bir araç seti sunar. Excel kurulumuna ihtiyaç duymadan çalışabilmesi, onu sunucu ortamları ve otomatik veri hatları için özellikle değerli kılar.

İster finansal modeller oluşturuyor, ister veri analiz ediyor ya da rapor üretiyor olun, openpyxl Excel dosyalarını Python kodu aracılığıyla verimli bir şekilde işlemeniz için size gerekli araçları sunar.


Vinod Chugani's photo
Author
Vinod Chugani
LinkedIn

Veri Bilimi, Makine Öğrenimi ve Üretken Yapay Zeka alanlarında yetkin bir profesyonel olan Vinod, bilgisini paylaşmaya ve bu dinamik alanda başarıya ulaşmaları için hevesli veri bilimcilerini güçlendirmeye kendini adamıştır.

openpyxl SSS

openpyxl hangi dosya türlerini destekler?

openpyxl, .xlsx, .xlsm, .xltx ve xltm dahil olmak üzere çeşitli Excel formatlarını destekler. Excel 2003 ve öncesinde kullanılan eski .xls formatını desteklemez.

openpyxl Excel formüllerini okuyup değerlendirebilir mi?

openpyxl formülleri okuyup yazabilir, ancak onları değerlendirmez. Formül sonuçlarını görmek için dosyanın önce Excel'de açılıp kaydedilmesi gerekir.

openpyxl kullanmak için Microsoft Excel'in yüklü olması gerekir mi?

Hayır, openpyxl tamamen Python içinde çalışır ve makinenizde Excel kurulu olmasını gerektirmez.

​openpyxl ile Excel'e görsel ekleyebilir miyim?

Evet, ancak Pillow kütüphanesinin yüklü olması ve add_image() çağrıldığında görsel dosyasının diskte mevcut bulunması gerekir.

openpyxl büyük Excel dosyaları için uygun mu?

Evet, özellikle okuma performansını artıran read_only=True modunu kullanırken büyük elektronik tablolar için uygundur.

Konular

DataCamp ile öğrenin

Program

Yardımcı Python Geliştiricisi

32 sa
Fonksiyon yazmaktan sınıf tanımlamaya kadar yazılım geliştirme için Python öğrenin. Geliştirici kariyerinize başlamak için gerekli becerileri edinin!
Ayrıntıları GörRight Arrow
Kursa Başla
Devamını GörRight Arrow