Arbeiten mit Formeln
Übersicht
Aspose.Cells FOSS speichert Formeln als Excel‑kompatible Zeichenketten. Die Bibliothek wertet Formeln intern nicht aus — sie bewahrt den Ausdruck unverändert in der Datei, und die Tabellenkalkulationsanwendung (Excel, LibreOffice Calc oder ein kompatibler Reader) berechnet das Ergebnis, wenn die Datei geöffnet wird.
Es gibt zwei Möglichkeiten, eine Formel in einer Zelle zu platzieren:
- Zellenkonstruktor –
ws.cells["A4"] = Cell(None, "=SUM(A1:A3)") .formulaEigenschaft –ws.cells["A4"].formula = "=SUM(A1:A3)"
Beide Ansätze speichern dieselben Daten. Die Konstruktorform ist kompakt, wenn Sie ein Blatt von Grund auf neu erstellen; die Property‑Form ist natürlicher, wenn Sie bereits einen Verweis auf eine vorhandene Zelle haben und dieser eine Formel zuweisen möchten.
Festlegen einer Formel über den Zellkonstruktor
Der Cell-Konstruktor hat die Signatur Cell(value, formula). Um eine reine
Formelzelle zu erstellen, übergeben Sie None als Wert und den Ausdrucks-String als zweites
Argument:
from aspose.cells_foss import Workbook, Cell
workbook = Workbook()
ws = workbook.worksheets[0]
##Input values
ws.cells["A1"] = Cell(10)
ws.cells["A2"] = Cell(25)
ws.cells["A3"] = Cell(15)
##Formula cell: value=None, formula="=SUM(A1:A3)"
ws.cells["A4"] = Cell(None, "=SUM(A1:A3)")
workbook.save("formula_constructor.xlsx")
print("Saved formula_constructor.xlsx")Das Setzen von value=None macht deutlich, dass die Zelle keinen statischen Wert hat — ihr angezeigter Inhalt stammt vollständig aus der Formel. Das Übergeben eines nicht-None Wertes zusammen mit einer Formel ist erlaubt, aber ungewöhnlich; die meisten Tabellenkalkulationsprogramme zeigen das Formelresultat an und ignorieren den gespeicherten Wert.
Festlegen einer Formel über die .formula‑Eigenschaft
Weisen Sie cell.formula direkt zu, wenn Sie bereits eine Zellreferenz besitzen oder wenn Sie einer Zelle, die zuvor mit einem Wert geschrieben wurde, eine Formel hinzufügen möchten:
from aspose.cells_foss import Workbook
workbook = Workbook()
ws = workbook.worksheets[0]
##Write input data
for i, val in enumerate([4, 8, 15, 16, 23], start=1):
ws.cells[f"A{i}"].value = val
##Attach a formula to an existing cell reference
cell = ws.cells["B1"]
cell.formula = "=AVERAGE(A1:A5)"
##Or assign directly by address
ws.cells["B2"].formula = "=MAX(A1:A5)"
ws.cells["B3"].formula = "=MIN(A1:A5)"
workbook.save("formula_property.xlsx")
print("Saved formula_property.xlsx")Eine Formel zurücklesen
Nachdem Sie eine Formezelle geschrieben haben, verwenden Sie .formula, um die Ausdruckszeichenkette abzurufen
und .value, um den beliebigen statischen Wert (falls vorhanden) abzurufen, der daneben gespeichert wurde.
from aspose.cells_foss import Workbook, Cell
workbook = Workbook()
ws = workbook.worksheets[0]
ws.cells["A1"] = Cell(None, "=SUM(B1:B5)")
cell = ws.cells["A1"]
print(cell.formula) # =SUM(B1:B5)
print(cell.value) # None (no static value was set)In der Praxis ist .value None für jede Zelle, die mit Cell(None, formula) erstellt wurde.
Wenn Sie eine vorhandene Arbeitsmappe laden, die zuvor mit berechneten Werten
zusammen mit Formeln zwischengespeichert wurde, .value kann das zuletzt zwischengespeicherte Ergebnis zurückgeben — aber dieses
Verhalten hängt davon ab, wie die ursprüngliche Anwendung die Datei gespeichert hat und sollte
nicht für frische Berechnungen verwendet werden.
Um zur Laufzeit eine Formezelle von einer Zelle mit einfachem Wert zu unterscheiden:
cell = ws.cells["A1"]
if cell.formula:
print(f"Formula cell: {cell.formula}")
else:
print(f"Value cell: {cell.value}")Übliche Excel-Formeln
Die folgende Tabelle listet häufig verwendete Excel‑Funktionen mit Beispiel‑Formelzeichenketten auf, die Sie direkt an Aspose.Cells FOSS übergeben können.
| Zweck | Formelzeichenfolge | Hinweise |
|---|---|---|
| Summe eines Bereichs | =SUM(A1:A10) | Addiert alle numerischen Werte im Bereich |
| Durchschnitt eines Bereichs | =AVERAGE(A1:A10) | Ignoriert leere Zellen |
| Maximalwert | =MAX(A1:A10) | Gibt die größte Zahl zurück |
| Minimalwert | =MIN(A1:A10) | Gibt die kleinste Zahl zurück |
| Anzahl numerischer Zellen | =COUNT(A1:A10) | Zählt nur Zellen mit numerischen Werten |
| Anzahl nicht leerer Zellen | =COUNTA(A1:A10) | Zählt jede nicht leere Zelle |
| Bedingter Wert | =IF(A1>100,"High","Low") | Dreier‑Argument‑Form: Test, Ergebnis bei wahr, Ergebnis bei falsch |
| Vertikaler SVERWEIS | =VLOOKUP(D1,A1:B10,2,FALSE) | Exakte Übereinstimmung (FALSE) empfohlen |
| Zeichenketten verketten | =CONCATENATE(A1," ",B1) | Oder verwende =A1&" "&B1 |
| Zahl runden | =ROUND(A1,2) | Zweites Argument ist die Anzahl der Dezimalstellen |
Alle Formelzeichenketten müssen mit = beginnen. Funktionsnamen sind in
Excel‑kompatiblen Dateien nicht zwischen Groß‑ und Kleinschreibung unterscheidend, aber die konventionelle Großschreibweise wird oben zur besseren Lesbarkeit
angezeigt.
Vollständiges Beispiel
Das folgende Beispiel erstellt einen fünfzeiligen Datensatz numerischer Werte in Spalte A, schreibt dann SUM, AVERAGE, MAX und MIN Formeln in Spalte B und speichert das Ergebnis in einer XLSX-Datei.
from aspose.cells_foss import Workbook, Cell
workbook = Workbook()
ws = workbook.worksheets[0]
##--- Headers ---
ws.cells["A1"].value = "Value"
ws.cells["B1"].value = "Formula"
ws.cells["C1"].value = "Result (evaluated by Excel)"
##--- Input data in A2:A6 ---
input_values = [14, 28, 7, 35, 21]
for i, val in enumerate(input_values, start=2):
ws.cells[f"A{i}"].value = val
##--- Formula labels in B column ---
ws.cells["B2"].value = "SUM"
ws.cells["B3"].value = "AVERAGE"
ws.cells["B4"].value = "MAX"
ws.cells["B5"].value = "MIN"
##--- Formulas in C column ---
ws.cells["C2"] = Cell(None, "=SUM(A2:A6)")
ws.cells["C3"] = Cell(None, "=AVERAGE(A2:A6)")
ws.cells["C4"] = Cell(None, "=MAX(A2:A6)")
ws.cells["C5"] = Cell(None, "=MIN(A2:A6)")
##--- Save ---
workbook.save("formulas_demo.xlsx")
print("Saved formulas_demo.xlsx")Wenn diese Datei in Excel oder LibreOffice Calc geöffnet wird, wird Spalte C angezeigt:
| Zeile | Formel | Erwartetes Ergebnis |
|---|---|---|
| C2 | =SUM(A2:A6) | 105 |
| C3 | =AVERAGE(A2:A6) | 21 |
| C4 | =MAX(A2:A6) | 35 |
| C5 | =MIN(A2:A6) | 7 |
Hinweise
Formelzeichenketten müssen mit = beginnen
Die Bibliothek speichert die Zeichenkette unverändert. Das Weglassen des führenden = führt dazu, dass der Tabellenkalkulationsleser den Text als wörtliche Zeichenkette statt als Formel behandelt.
##Correct — starts with =
ws.cells["A1"].formula = "=SUM(B1:B5)"
##Wrong — treated as the literal text "SUM(B1:B5)", not a formula
ws.cells["A1"].formula = "SUM(B1:B5)"Bereichsverweise verwenden die standardmäßige Excel A1-Notation
Zeilen‑Spalten‑Bereiche werden als FirstCell:LastCell geschrieben, wobei Großbuchstaben für die Spalten und einbasierte Zeilennummern verwendet werden: "A1:A10", "B2:D5", "C3:C3". Die FOSS‑Bibliothek übersetzt oder validiert den Bereichs‑String nicht — ein ungültiger Bereich wird unverändert gespeichert und verursacht beim Öffnen des Tabellenkalkulations‑Lesers einen Fehler.
Formeln werden als Zeichenketten gespeichert, nicht ausgewertet
Aspose.Cells FOSS enthält keine Formelengine. Wenn Sie das berechnete
Ergebnis einer Formel in Python (z. B. um weitere Berechnungen durchzuführen),
berechnen Sie den Wert selbst und schreiben Sie ihn als statischen Wert mit .value. Verwenden
Sie Formeln nur, wenn der Endbenutzer die Datei in einer Tabellenkalkulationsanwendung
öffnet, die sie auswerten kann.
Siehe auch
- API Reference: Vollständige Klassen‑ und Methodendokumentation für
aspose.cells_foss - Knowledge Base: Aufgabenorientierte Anleitungen
- Product Overview: Zusammenfassung von Funktionen und Fähigkeiten
- Getting Started / Installation: pip install und Einrichtung
- Blog: Introducing Aspose.Cells FOSS: Bibliotheksübersicht und Schnellstart