Arbeta med formler
Översikt
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.
Det finns två sätt att placera en formel i en cell:
- Cellkonstruktor —
ws.cells["A4"] = Cell(None, "=SUM(A1:A3)") .formulaegenskap —ws.cells["A4"].formula = "=SUM(A1:A3)"
Båda tillvägagångssätten lagrar samma data. Konstruktörsformen är kompakt när du bygger ett blad från grunden; egenskapsformen är mer naturlig när du redan har en referens till en befintlig cell och vill bifoga en formel till den.
Ställa in en formel via Cell‑konstruktorn
Den Cell konstruktorsignaturen är Cell(value, formula). För att skapa en ren formelcell, skicka None som värde och uttryckssträngen som den andra argumentet:
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")Inställning value=None gör det explicit att cellen inte har något statiskt värde — dess visade innehåll kommer helt från formeln. Att skicka ett icke-None värde samtidigt med en formel är tillåtet men ovanligt; de flesta kalkylbladsprogram kommer att visa formelresultatet och ignorera det lagrade värdet.
Ställa in en formel via .formula Egenskap
Tilldela direkt till cell.formula när du redan har en cellreferens eller när du vill lägga till en formel i en cell som tidigare skrevs med ett värde:
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")Läsa tillbaka en formel
Efter att ha skrivit en formelcell, använd .formula för att hämta uttryckssträngen och .value för att hämta vilket statiskt värde (om något) som lagrades bredvid den.
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)I praktiken, .value är None för alla celler skapade med Cell(None, formula). Om du laddar ett befintligt arbetsbok som tidigare sparats med beräknade värden cachade tillsammans med formler, .value kan returnera det senaste cachade resultatet — men detta beteende beror på hur den ursprungliga applikationen sparade filen och bör inte förlitas på för nya beräkningar.
För att skilja en formelcell från en vanlig värdecell vid körning:
cell = ws.cells["A1"]
if cell.formula:
print(f"Formula cell: {cell.formula}")
else:
print(f"Value cell: {cell.value}")Vanliga Excel-formler
Följande tabell listar ofta använda Excel-funktioner med exempel på formelsträngar som du kan skicka direkt till Aspose.Cells FOSS.
| Syfte | Formelsträng | Anteckningar |
|---|---|---|
| Summera ett område | =SUM(A1:A10) | Adderar alla numeriska värden i intervallet |
| Genomsnitt av ett område | =AVERAGE(A1:A10) | Ignorerar tomma celler |
| Maximalt värde | =MAX(A1:A10) | Returnerar det största talet |
| Minsta värde | =MIN(A1:A10) | Returnerar det minsta talet |
| Räkna numeriska celler | =COUNT(A1:A10) | Räknar endast celler med numeriska värden |
| Räkna icke-tomma celler | =COUNTA(A1:A10) | Räknar alla icke-blanka celler |
| Villkorligt värde | =IF(A1>100,"High","Low") | Tre-argumentform: test, sant resultat, falskt resultat |
| Vertikal uppslagning | =VLOOKUP(D1,A1:B10,2,FALSE) | Exakt matchning (FALSE) rekommenderas |
| Kombinera strängar | =CONCATENATE(A1," ",B1) | Eller använd =A1&" "&B1 |
| Avrunda ett tal | =ROUND(A1,2) | Andra argumentet är decimalplatser |
Alla formelsträngar måste börja med =. Funktionsnamn är skiftlägesokänsliga i Excel-kompatibla filer, men den konventionella versala formen visas ovan för läsbarhet.
Fullständigt exempel
Följande exempel skapar en dataset med fem rader av numeriska värden i kolumn A, skriver sedan SUM, AVERAGE, MAX och MIN-formler i kolumn B och sparar resultatet till en XLSX-fil.
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")När den här filen öppnas i Excel eller LibreOffice Calc kommer kolumn C att visa:
| Rad | Formel | Förväntat resultat |
|---|---|---|
| C2 | =SUM(A2:A6) | 105 |
| C3 | =AVERAGE(A2:A6) | 21 |
| C4 | =MAX(A2:A6) | 35 |
| C5 | =MIN(A2:A6) | 7 |
Anteckningar
Formelsträngar måste börja med =
Biblioteket lagrar strängen som den är. Att utelämna den inledande = orsakar att kalkylbladsavläsaren behandlar texten som en bokstavlig sträng snarare än en formel.
##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)"Områdesreferenser använder standard Excel A1‑notation
Rad‑kolumnintervall skrivs som FirstCell:LastCell med versala kolumn bokstäver och en-baserade radnummer: "A1:A10", "B2:D5", "C3:C3". Den FOSS biblioteket översätter eller validerar inte intervallsträngen — ett ogiltigt intervall kommer att lagras ordagrant och orsakar ett fel i kalkylbladsavläsaren vid öppning.
Formler lagras som strängar, inte utvärderade
Aspose.Cells FOSS does not include a formula engine. If you need the computed resultatet av en formel i Python (till exempel för att utföra ytterligare beräkningar), beräkna värdet själv och skriv det som ett statiskt värde med .value. Använd formler endast när slutanvändaren öppnar filen i ett kalkylprogram som kan utvärdera dem.
Se även
- API-referens: Fullständig klass- och metoddokumentation för
aspose.cells_foss - Kunskapsbas: Uppgiftsorienterade hur-man-gör-guider
- Produktöversikt: Sammanfattning av funktioner och möjligheter
- Komma igång / Installation: pip install och konfiguration
- Blogg: Introducerar Aspose.Cells FOSS: Biblioteksöversikt och snabbstart