Migration von openpyxl
Office Oxide liest XLSX 18× schneller als openpyxl (5,0 ms gegenüber 94,5 ms Mittelwert über 1 802 Dateien) und hat die höchste Erfolgsquote aller getesteten Bibliotheken. Es liest auch Legacy-.xls direkt — was openpyxl überhaupt nicht kann.
Wann migrieren
Wechseln Sie, wenn Sie eines dieser Dinge tun:
- Zellen, Zeilen, Blätter oder Tabellen aus
.xlsxfür Ingest / RAG / Dashboards lesen - Tabellen in Markdown oder HTML konvertieren
.xls-Support benötigen, ohnexlrd(seit 2.0 veraltet) hinzuzufügen oder LibreOffice aufzurufen- Zusätzlich
.docx,.pptxoder Legacy-DOC/PPT verarbeiten wollen, ohne weitere Abhängigkeiten EditableDocumentzum Schreiben von Zellen in Templates nutzen
Bleiben Sie bei openpyxl, wenn:
- Sie komplexe XLSX von Grund auf bauen — mit Charts, bedingter Formatierung, benannten Styles und Pivot-Tabellen (openpyxl ist die stärkste Pure-Python-Option für vollumfängliche Erzeugung)
- Sie Formel-Evaluation in reinem Python brauchen
Installation
pip uninstall openpyxl
pip install office-oxide
Spickzettel im Direktvergleich
Arbeitsmappe öffnen
openpyxl
from openpyxl import load_workbook
wb = load_workbook("budget.xlsx", data_only=True)
office_oxide
from office_oxide import Document
with Document.open("budget.xlsx") as doc:
...
Über Blattzellen iterieren
openpyxl
from openpyxl import load_workbook
wb = load_workbook("budget.xlsx", data_only=True)
for sheet in wb.worksheets:
for row in sheet.iter_rows(values_only=True):
print(row)
office_oxide
from office_oxide import Document
with Document.open("budget.xlsx") as doc:
ir = doc.to_ir()
for section in ir["sections"]:
print(f"# {section.get('title')}")
for el in section["elements"]:
if el["kind"] == "Table":
for row in el["rows"]:
print(row)
Für detaillierteren Zellzugriff (Typen, Formeln, verbundene Zellen) geht es ins XLSX-Modul:
with Document.open("budget.xlsx") as doc:
xlsx = doc.as_xlsx()
for sheet in xlsx.sheets():
for cell in sheet.cells():
print(cell.address(), cell.value(), cell.value_type())
Einzelne Zelle lesen
openpyxl
wb = load_workbook("budget.xlsx", data_only=True)
sheet = wb["Q4"]
val = sheet["B5"].value
office_oxide
with Document.open("budget.xlsx") as doc:
val = doc.as_xlsx().sheet("Q4").cell("B5").value()
Zellen schreiben (Templating)
openpyxl
from openpyxl import load_workbook
wb = load_workbook("template.xlsx")
ws = wb["Summary"]
ws["A1"] = "Total"
ws["B1"] = 42.5
ws["C1"] = True
wb.save("filled.xlsx")
office_oxide
from office_oxide import EditableDocument
with EditableDocument.open("template.xlsx") as ed:
ed.set_cell(0, "A1", "Total") # sheet 0 = erstes Blatt
ed.set_cell(0, "B1", 42.5)
ed.set_cell(0, "C1", True)
ed.save("filled.xlsx")
sheet_index ist nullbasiert; cell_ref ist Standard-A1-Notation. Um Blattnamen → Index aufzulösen, lesen Sie die Mappe einmal und rufen sheets() auf.
Konvertierung zu Markdown / HTML
openpyxl — nicht eingebaut; Sie müssten Zeilen selbst rendern.
office_oxide
with Document.open("budget.xlsx") as doc:
md = doc.to_markdown() # ein ##-Abschnitt pro Blatt, GFM-Tabellen
Blattnamen lesen
openpyxl
wb = load_workbook("budget.xlsx")
print(wb.sheetnames)
office_oxide
with Document.open("budget.xlsx") as doc:
print([s.name() for s in doc.as_xlsx().sheets()])
Legacy-.xls lesen
openpyxl kann .xls nicht öffnen. Der historische Workaround war xlrd, seit 2.0 für .xls veraltet und nicht mehr gepflegt.
office_oxide
from office_oxide import Document
with Document.open("legacy.xls") as doc:
print(doc.plain_text())
doc.save_as("modern.xlsx") # Einzeiler-Migration
Performance
| Bibliothek | Mittel | p99 | Erfolgsquote |
|---|---|---|---|
| office_oxide | 5,0 ms | 40 ms | 97,8 % |
| python-calamine | 13,9 ms | 183 ms | 96,6 % |
| openpyxl | 94,5 ms | 698 ms | 96,2 % |
Eine typische Analyse-Pipeline, die täglich 100 000 Tabellen liest: 8 Stunden 18 Minuten mit openpyxl, 26 Minuten mit office_oxide.
Was verloren geht
EditableDocument.set_cell schreibt Rohwerte in Zellen; Zahlenformate, bedingte Formatierung, Charts und benannte Bereiche werden nicht verändert (diese Teile bleiben wortgetreu erhalten). Für den Bau von XLSX mit vollem Styling nutzen Sie openpyxl oder steigen in office_oxide.xlsx::create::XlsxBuilder ab.
Siehe auch
- XLSX-Zellen setzen — vollständige Typmatrix und Edge Cases
- Migration von xlrd — für Legacy-
.xls - Performance-Benchmarks