Darbas su formulėmis

Apžvalga

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.

Yra du būdai įdėti formulę į langelį:

  1. Ląstelės konstruktorius — ws.cells["A4"] = Cell(None, "=SUM(A1:A3)")
  2. .formula savybė — ws.cells["A4"].formula = "=SUM(A1:A3)"

Abu metodai saugo tuos pačius duomenis. Konstruktoriaus forma yra kompaktiška, kai kuriate lapą nuo nulio; savybės forma yra natūralesnė, kai jau turite nuorodą į esamą langelį ir norite jam pridėti formulę.


Formulės nustatymas per Cell konstruktorių

Šis Cell konstruktoriaus parašas yra Cell(value, formula). Norint sukurti gryną formulės langelį, perduokite None kaip reikšmę ir išraiškos eilutę kaip antrąją 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")

Nustatymas value=None padaro aiškų, kad langelis neturi statinės reikšmės — jo rodomas turinys visiškai gaunamas iš formulės. Perduodant ne-None reikšmė kartu su formule leidžiama, bet neįprasta; dauguma skaičiuoklių skaityklių rodys formulės rezultatą ir ignoruos saugomą reikšmę.


Formulės nustatymas per .formula Savybę

Priskirkite tiesiogiai cell.formula kai jau turite langelio nuorodą arba kai norite pridėti formulę į langelį, kuris anksčiau buvo užrašytas su reikšme:

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")

Formulės skaitymas atgal

Po formulės įvedimo į langelį, naudokite .formula norėdami gauti išraiškos eilutę ir .value norėdami gauti bet kokią statinę reikšmę (jei yra), kuri buvo saugoma kartu su ja.

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)

Praktikoje, .value yra None bet kuriam langeliui, sukurtam su Cell(None, formula). Jei įkeliate esamą darbaknygę, kuri anksčiau buvo išsaugota su apskaičiuotomis reikšmėmis kaupiamos kartu su formulėmis, .value gali grąžinti paskutinį kaupiamą rezultatą — bet tai elgesys priklauso nuo to, kaip kilusi programa išsaugojo failą, ir turėtų nebūti patikimas šviežiam skaičiavimui.

Norint vykdymo metu atskirti formulės langelį nuo paprasto reikšmės langelio:

cell = ws.cells["A1"]
if cell.formula:
    print(f"Formula cell: {cell.formula}")
else:
    print(f"Value cell: {cell.value}")

Bendros Excel formulės

Žemiau pateikta lentelė išvardija dažniausiai naudojamas Excel funkcijas su pavyzdiniais formulės eilutėmis, kurias galite tiesiogiai perduoti Aspose.Cells FOSS.

TikslasFormulės eilutėPastabos
Suma diapazonui=SUM(A1:A10)Prideda visas skaitines reikšmes diapazone
Diapazono vidurkis=AVERAGE(A1:A10)Ignoruojamos tuščios ląstelės
Maksimali reikšmė=MAX(A1:A10)Grąžina didžiausią skaičių
Mažiausia reikšmė=MIN(A1:A10)Grąžina mažiausią skaičių
Skaičiuoti skaitinius langelius=COUNT(A1:A10)Skaičiuoja tik skaitines reikšmes turinčius langelius
Skaičiuoti ne tuščius langelius=COUNTA(A1:A10)Skaičiuoja bet kurį ne tuščią langelį
Sąlyginė reikšmė=IF(A1>100,"High","Low")Trijų argumentų forma: testas, teisingas rezultatas, klaidingas rezultatas
Vertikalus paieškos=VLOOKUP(D1,A1:B10,2,FALSE)Tikslus atitikmuo (FALSE) rekomenduojama
Sujungti eilutes=CONCATENATE(A1," ",B1)Arba naudokite =A1&" "&B1
Suapvalinti skaičių=ROUND(A1,2)Antras argumentas – dešimtainiai skaitmenys

Visos formulės eilutės turi prasidėti =. Funkcijų pavadinimai yra ne jautrūs raidžių dydžiui Excel suderinamuose failuose, tačiau įprasta didžiųjų raidžių forma parodyta aukščiau dėl skaitomumo.


Pilnas pavyzdys

Žemiau pateiktas pavyzdys sukuria penkių eilučių duomenų rinkinį su skaitiniais reikšmėmis stulpelyje A, tada įrašo SUM, AVERAGE, MAX ir MIN formules į stulpelį B ir išsaugo rezultatą į XLSX failą.

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")

Kai šis failas atveriamas Excel arba LibreOffice Calc, stulpelyje C bus rodomas:

EilutėFormulėTikėtinas rezultatas
C2=SUM(A2:A6)105
C3=AVERAGE(A2:A6)21
C4=MAX(A2:A6)35
C5=MIN(A2:A6)7

Pastabos

Formulės eilutės turi prasidėti =

Biblioteka saugo eilutę tokia, kokia ji yra. Praleidžiant pradžios = sukelia skaičiuoklės skaitytui tekstą interpretuoti kaip tiesioginę eilutę, o ne formulę.

##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)"

Diapazonų nuorodos naudoja standartinę Excel A1 notaciją

Eilutės-stulpelio intervalai rašomi kaip FirstCell:LastCell naudojant didžiąsias stulpelio raides ir vienu pagrindu skaičiuojamus eilutės numerius: "A1:A10", "B2:D5", "C3:C3". FOSS biblioteka nevertina ir nepatikrina intervalo eilutės — neteisingas intervalas bus saugomas nepakitęs ir sukels klaidą skaičiuoklės skaitytuve atidarant failą.

Formulės saugomos kaip eilutės, nevertinamos.

Aspose.Cells FOSS does not include a formula engine. If you need the computed formulės rezultatas Python (pavyzdžiui, atlikti tolesnius skaičiavimus), apskaičiuokite reikšmę patys ir įrašykite ją kaip statinę reikšmę su .value. Naudokite formules tik tada, kai galutinis naudotojas atvers failą skaičiuoklių programoje kurios gali jas įvertinti.

Taip pat žiūrėkite

 Lietuvių