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:
- Konstruktor komórki –
ws.cells["A4"] = Cell(None, "=SUM(A1:A3)") .formulawł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.
| Cel | Ciąg formuły | Uwagi |
|---|---|---|
| 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:
| Wiersz | Formuła | Oczekiwany 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
- Referencja API: Pełna dokumentacja klas i metod dla
aspose.cells_foss - Baza wiedzy: Przewodniki praktyczne zorientowane na zadania
- Przegląd produktu: Podsumowanie funkcji i możliwości
- Rozpoczęcie / Instalacja: pip install i konfiguracja
- Blog: Wprowadzenie Aspose.Cells FOSS: Przegląd biblioteki i szybki start