Werken met formules
Overzicht
Aspose.Cells FOSS stores formulas as Excel-compatible strings. The library does not evaluate formulas internally — it preserves the expression verbatim in the file, and the spreadsheet application (Excel, LibreOffice Calc, or any compatible reader) computes the result when the file is opened.
Er zijn twee manieren om een formule in een cel te plaatsen:
- Celconstructor —
ws.cells["A4"] = Cell(None, "=SUM(A1:A3)") .formulaeigenschap —ws.cells["A4"].formula = "=SUM(A1:A3)"
Beide benaderingen slaan dezelfde gegevens op. De constructor‑vorm is compact wanneer je een blad vanaf nul opbouwt; de eigenschap‑vorm is natuurlijker wanneer je al een referentie naar een bestaande cel hebt en daar een formule aan wilt koppelen.
Een formule instellen via de Cell‑constructor
De Cell constructorhandtekening is Cell(value, formula). Om een pure formulecel, geef None als de waarde en de expressiestring als de tweede 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")Instellen value=None maakt expliciet dat de cel geen statische waarde heeft — zijn weergegeven inhoud komt volledig uit de formule. Het doorgeven van een niet-None waarde naast een formule is toegestaan maar ongebruikelijk; de meeste spreadsheetlezers zullen weergeven het resultaat van de formule en de opgeslagen waarde negeren.
Instellen van een formule via de .formula Eigenschap
Direct toewijzen aan cell.formula wanneer je al een celreferentie hebt of wanneer je wilt een formule toevoegen aan een cel die eerder met een waarde is geschreven:
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")Een formule teruglezen
Na het schrijven van een formulecel, gebruik .formula om de expressiestring op te halen en .value om de eventuele statische waarde (indien aanwezig) op te halen die ernaast was opgeslagen.
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 de praktijk, .value is None voor elke cel die is aangemaakt met Cell(None, formula). Als je een bestaand werkboek laadt dat eerder is opgeslagen met berekende waarden gecachte naast formules, .value kan het laatste gecachte resultaat retourneren — maar dit gedrag hangt af van hoe de oorspronkelijke applicatie het bestand heeft opgeslagen en zou niet moeten worden vertrouwd voor verse berekeningen.
Om tijdens runtime een formulecel te onderscheiden van een gewone‑waardecel:
cell = ws.cells["A1"]
if cell.formula:
print(f"Formula cell: {cell.formula}")
else:
print(f"Value cell: {cell.value}")Veelvoorkomende Excel-formules
De onderstaande tabel geeft veelgebruikte Excel-functies weer met voorbeeldformules die je rechtstreeks kunt doorgeven aan Aspose.Cells FOSS.
| Doel | Formulestring | Opmerkingen |
|---|---|---|
| Som van een bereik | =SUM(A1:A10) | Voegt alle numerieke waarden in het bereik toe |
| Gemiddelde van een bereik | =AVERAGE(A1:A10) | Negeert lege cellen |
| Maximumwaarde | =MAX(A1:A10) | Retourneert het grootste getal |
| Minimumwaarde | =MIN(A1:A10) | Retourneert het kleinste getal |
| Tel numerieke cellen | =COUNT(A1:A10) | Telt cellen met uitsluitend numerieke waarden |
| Tel niet-lege cellen | =COUNTA(A1:A10) | Telt elke niet-lege cel |
| Voorwaardelijke waarde | =IF(A1>100,"High","Low") | Drie-argumentenvorm: test, waar-waarde, onwaar-waarde |
| Verticale zoekopdracht | =VLOOKUP(D1,A1:B10,2,FALSE) | Exacte overeenkomst (FALSE) aanbevolen |
| Strings samenvoegen | =CONCATENATE(A1," ",B1) | Of gebruik =A1&" "&B1 |
| Rond een getal af | =ROUND(A1,2) | Tweede argument is decimalen |
Alle formulestringen moeten beginnen met =. Functienamen zijn niet hoofdlettergevoelig in Excel-compatibele bestanden, maar de conventionele hoofdlettervorm wordt hierboven getoond voor leesbaarheid.
Volledig voorbeeld
Het volgende voorbeeld maakt een dataset van vijf rijen met numerieke waarden in kolom A, schrijft vervolgens SUM-, AVERAGE-, MAX- en MIN‑formules naar kolom B, en slaat het resultaat op in een XLSX‑bestand.
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")Wanneer dit bestand wordt geopend in Excel of LibreOffice Calc, zal kolom C weergeven:
| Rij | Formule | Verwacht resultaat |
|---|---|---|
| C2 | =SUM(A2:A6) | 105 |
| C3 | =AVERAGE(A2:A6) | 21 |
| C4 | =MAX(A2:A6) | 35 |
| C5 | =MIN(A2:A6) | 7 |
Opmerkingen
Formule‑strings moeten beginnen met =
De bibliotheek slaat de string op zoals hij is. Het weglaten van de leidende = zorgt ervoor dat de spreadsheet-lezer de tekst als een letterlijke string behandelt in plaats van als een formule.
##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)"Bereik‑referenties gebruiken de standaard Excel A1-notatie
Rij‑kolombereiken worden geschreven als FirstCell:LastCell met hoofdletter‑kolom letters en één‑gebaseerde rijnummers: "A1:A10", "B2:D5", "C3:C3". De FOSS bibliotheek vertaalt of valideert de range‑string niet — een ongeldige range zal woordelijk worden opgeslagen en een fout veroorzaken in de spreadsheet-lezer bij het openen.
Formules worden opgeslagen als strings, niet geëvalueerd
Aspose.Cells FOSS does not include a formula engine. If you need the computed resultaat van een formule in Python (bijvoorbeeld om verdere berekeningen uit te voeren), bereken de waarde zelf en schrijf deze als een statische waarde met .value. Gebruik formules alleen wanneer de eindgebruiker het bestand opent in een spreadsheet‑applicatie die ze kan evalueren.
Zie ook
- API-referentie: Volledige klasse- en methodedocumentatie voor
aspose.cells_foss - Kennisbank: Taakgerichte stap-voor-stap handleidingen
- Productoverzicht: Samenvatting van functies en mogelijkheden
- Aan de slag / Installatie: pip install en configuratie
- Blog: Introductie van Aspose.Cells FOSS: Bibliotheekoverzicht en snelle start