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:

  1. Cellkonstruktor — ws.cells["A4"] = Cell(None, "=SUM(A1:A3)")
  2. .formula egenskap — 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.

SyfteFormelsträngAnteckningar
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:

RadFormelFö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

 Svenska