Python Lernhandbuch

Kapitel 11: CSV, JSON und Excel lesen und bearbeiten · Abschnitt 3 von 4

Excel mit openpyxl

bash
uv add openpyxl

openpyxl liest und schreibt .xlsx-Dateien, ohne dass Excel installiert sein muss.

Lesen:

python
from openpyxl import load_workbook

wb = load_workbook('verkaeufe.xlsx', data_only=True)   # data_only: Werte statt Formeln
ws = wb.active                                          # erstes (aktives) Blatt
# oder gezielt: ws = wb['Tabelle1']

print(wb.sheetnames, ws.max_row, ws.max_column)

print(ws['A1'].value)                      # einzelne Zelle per Name
print(ws.cell(row=2, column=3).value)      # per Zeile und Spalte (zählt ab 1!)

for zeile in ws.iter_rows(min_row=2, values_only=True):   # ab Zeile 2, nur Werte
    kunde, artikel, menge, preis = zeile
    print(kunde, menge * preis)
Funktion und Parameter Bedeutung
load_workbook(filename, read_only=False, data_only=False) Öffnet eine Datei. read_only=True spart Speicher bei großen Dateien. data_only=True liefert berechnete Werte statt Formeltext (nur sinnvoll, wenn die Datei zuvor von Excel gespeichert wurde)
wb.active, wb['Name'], wb.sheetnames Blatt auswählen, Blattnamen
ws.iter_rows(min_row, max_row, min_col, max_col, values_only=False) Läuft über Zeilen. values_only=True liefert direkt die Werte statt Zellobjekte
ws.cell(row, column, value=None) Zelle per Zeile und Spalte (ab 1)
ws['B3'] Zelle per Name
ws.max_row, ws.max_column Größe des benutzten Bereichs

Schreiben und formatieren:

python
from openpyxl import Workbook
from openpyxl.styles import Font, PatternFill, Alignment

wb = Workbook()
ws = wb.active
ws.title = 'Umsatz'

ws.append(['Kunde', 'Umsatz'])             # Kopfzeile
ws.append(['Anna', 15.0])
ws.append(['Ben', 15.0])
ws.append(['Cem', 28.0])
ws['D1'] = 'Summe'
ws['D2'] = '=SUM(B2:B4)'                    # Formeln als Text mit =

for zelle in ws[1]:                          # Kopfzeile formatieren
    zelle.font = Font(bold=True, color='FFFFFF')
    zelle.fill = PatternFill('solid', start_color='305496')
    zelle.alignment = Alignment(horizontal='center')

ws.column_dimensions['A'].width = 20         # Spaltenbreite
for zeile in ws.iter_rows(min_row=2, min_col=2, max_col=2):
    zeile[0].number_format = '#,##0.00 "€"'   # Zahlenformat
ws.freeze_panes = 'A2'                       # Kopfzeile beim Scrollen fixieren

wb.save('umsatz.xlsx')
Baustein Bedeutung
ws.append(liste) Hängt eine Zeile unten an
ws['A1'] = wert Schreibt in eine Zelle
Font(bold=False, italic=False, size=11, color='000000') Schrift. Farben als Hex-Text ohne #
PatternFill('solid', start_color='305496') Hintergrundfarbe
Alignment(horizontal, vertical, wrap_text=False) Ausrichtung
ws.column_dimensions['A'].width Spaltenbreite
cell.number_format Zahlen- und Datumsformat, z. B. '0.00', 'DD.MM.YYYY'
ws.freeze_panes Fixiert Zeilen und Spalten oberhalb und links der Zelle
wb.save(dateiname) Speichert. Bestehende Dateien werden überschrieben

Hinweis: openpyxl berechnet Formeln nicht selbst. Sie werden erst beim Öffnen in Excel oder LibreOffice sichtbar berechnet. Wenn du den Wert im Programm brauchst, rechne ihn in Python.

Tipp: Bei Python-Beispielen kannst du auf ▶ Ausprobieren klicken, den Code verändern und direkt ausführen.

← Zurück