Praca z formułami

Przegląd

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.

Istnieją dwa sposoby umieszczenia formuły w komórce:

  1. Konstruktor komórki – ws.cells["A4"] = Cell(None, "=SUM(A1:A3)")
  2. .formula właściwość – ws.cells["A4"].formula = "=SUM(A1:A3)"

Oba podejścia zapisują te same dane. Forma konstruktorowa jest zwięzła, gdy tworzysz arkusz od podstaw; forma właściwości jest bardziej naturalna, gdy już masz odwołanie do istniejącej komórki i chcesz do niej dołączyć formułę.


Ustawianie formuły za pomocą konstruktora Cell

Ten Cell sygnatura konstruktora jest Cell(value, formula). Aby utworzyć czystą komórkę formuły, przekaż None jako wartość i ciąg wyrażenia jako drugi 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")

Ustawienie value=None wyraźnie wskazuje, że komórka nie ma statycznej wartości — jej wyświetlana zawartość pochodzi w całości z formuły. Przekazanie nie-None wartości obok formuły jest dozwolone, ale nietypowe; większość czytników arkuszy kalkulacyjnych wyświetli wynik formuły i zignoruje zapisaną wartość.


Ustawianie formuły za pomocą .formula Właściwości

Przypisz bezpośrednio do cell.formula gdy już posiadasz odwołanie do komórki lub gdy chcesz dodać formułę do komórki, która wcześniej została zapisana z wartością:

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

Odczytywanie formuły

Po zapisaniu komórki z formułą użyj .formula aby pobrać ciąg wyrażenia i .value aby pobrać dowolną statyczną wartość (jeśli istnieje), która była przechowywana obok niej.

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)

W praktyce, .value jest None dla każdej komórki utworzonej przy użyciu Cell(None, formula). Jeśli wczytasz istniejący skoroszyt, który został wcześniej zapisany z obliczonymi wartościami zapisany w pamięci podręcznej razem z formułami, .value może zwrócić ostatni wynik z pamięci podręcznej — ale to zachowanie zależy od tego, jak aplikacja źródłowa zapisała plik i powinno nie być wykorzystywane do nowych obliczeń.

Aby w czasie wykonywania odróżnić komórkę z formułą od komórki z prostą wartością:

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

Popularne formuły Excel

Poniższa tabela wymienia często używane funkcje Excel wraz z przykładowymi ciągami formuł, które możesz przekazać bezpośrednio do Aspose.Cells FOSS.

CelCiąg formułyUwagi
Suma zakresu=SUM(A1:A10)Dodaje wszystkie wartości liczbowe w zakresie
Średnia zakresu=AVERAGE(A1:A10)Ignoruje puste komórki
Wartość maksymalna=MAX(A1:A10)Zwraca największą liczbę
Wartość minimalna=MIN(A1:A10)Zwraca najmniejszą liczbę
Zlicz komórki liczbowe=COUNT(A1:A10)Zlicza komórki zawierające wyłącznie wartości liczbowe
Zlicz niepuste komórki=COUNTA(A1:A10)Zlicza dowolną niepustą komórkę
Wartość warunkowa=IF(A1>100,"High","Low")Forma trójargumentowa: test, true-result, false-result
Wyszukiwanie pionowe=VLOOKUP(D1,A1:B10,2,FALSE)Dokładne dopasowanie (FALSE) zalecane
Łącz ciągi znaków=CONCATENATE(A1," ",B1)Lub użyj =A1&" "&B1
Zaokrąglij liczbę=ROUND(A1,2)Drugi argument to miejsca po przecinku

Wszystkie ciągi formuł muszą zaczynać się od =. Nazwy funkcji nie rozróżniają wielkości liter w plikach zgodnych z Excelem, ale konwencjonalna forma wielkimi liter jest pokazana powyżej dla czytelności.


Pełny przykład

Poniższy przykład tworzy zestaw danych składający się z pięciu wierszy wartości liczbowych w kolumnie A, następnie zapisuje formuły SUM, AVERAGE, MAX i MIN w kolumnie B i zapisuje wynik do pliku XLSX.

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

Po otwarciu tego pliku w Excelu lub LibreOffice Calc, kolumna C wyświetli:

WierszFormułaOczekiwany wynik
C2=SUM(A2:A6)105
C3=AVERAGE(A2:A6)21
C4=MAX(A2:A6)35
C5=MIN(A2:A6)7

Uwagi

Ciągi formuł muszą zaczynać się od =

Biblioteka przechowuje ciąg w niezmienionej formie. Pominięcie wiodącego = powoduje the czytnik arkusza kalkulacyjnego, aby traktował tekst jako dosłowny ciąg znaków, a nie jako formułę.

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

Odwołania do zakresów używają standardowej notacji Excel A1

Zakresy wiersz‑kolumna zapisywane są jako FirstCell:LastCell przy użyciu wielkich liter kolumny i liter oraz numerów wierszy zaczynających się od 1: "A1:A10", "B2:D5", "C3:C3". Biblioteka FOSS biblioteka nie tłumaczy ani nie weryfikuje ciągu zakresu — nieprawidłowy zakres zostanie zapisany dosłownie i spowoduje błąd w czytniku arkusza kalkulacyjnego w momencie otwarcia.

Formuły są przechowywane jako ciągi znaków, a nie obliczane

Aspose.Cells FOSS does not include a formula engine. If you need the computed wynik formuły w Python (na przykład w celu wykonania dalszych obliczeń), oblicz wartość samodzielnie i zapisz ją jako wartość statyczną przy użyciu .value. Użyj formułówek tylko wtedy, gdy końcowy użytkownik otworzy plik w aplikacji arkusza kalkulacyjnego które mogą je ocenić.

Zobacz także

 Polski