Program
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=Truebüyük dosyalar için performansı artırır ancak düzenleme yeteneklerini sınırlar -
data_only=Trueformü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.
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.
