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.