Работа с формули
Общ преглед
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.
Има два начина да поставите формула в клетка:
- Конструктор на клетка —
ws.cells["A4"] = Cell(None, "=SUM(A1:A3)") .formulaсвойство —ws.cells["A4"].formula = "=SUM(A1:A3)"
И двата подхода съхраняват еднакви данни. Формата с конструктор е компактна, когато създавате лист от нулата; формата със свойство е по-естествена, когато вече имате препратка към съществуваща клетка и искате да й добавите формула.
Задаване на формула чрез конструктора Cell
Този Cell подписът на конструктора е Cell(value, formula). За да създадете чист формулна клетка, предайте None като стойност и низът на израза като втори аргумент:
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")Настройка value=None прави изрично, че клетката няма статична стойност — нейният показваното съдържание идва изцяло от формулата. Предаване на не-None стойност заедно с формула е позволено, но необичайно; повечето четци на електронни таблици ще покажат резултата от формулата и ще игнорират съхранената стойност.
Задаване на формула чрез .formula Свойство
Присвояване директно на cell.formula когато вече имате препратка към клетка или когато искате да добавите формула към клетка, която преди това е била записана със стойност:
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")Четене на формула обратно
След като запишете клетка с формула, използвайте .formula за да извлечете низът на израза и .value за извличане на каквато и да е статична стойност (ако има такава), съхранена заедно с нея.
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)На практика, .value е None за всяка клетка, създадена с Cell(None, formula). Ако заредите съществуваща работна книга, която преди това е била запазена с изчислени стойности кеширани заедно с формулите, .value може да върне последния кеширан резултат — но това поведение зависи от начина, по който изходното приложение е запазило файла и трябва не може да се разчита за нови изчисления.
За да разграничите клетка с формула от обикновена клетка със стойност по време на изпълнение:
cell = ws.cells["A1"]
if cell.formula:
print(f"Formula cell: {cell.formula}")
else:
print(f"Value cell: {cell.value}")Чести Excel формули
Следната таблица изброява често използваните Excel функции с примерни низове на формули, които можете да предадете директно на Aspose.Cells FOSS.
| Цел | Формулен низ | Бележки |
|---|---|---|
| Сумирай диапазон | =SUM(A1:A10) | Добавя всички числови стойности в диапазона |
| Средна стойност на диапазон | =AVERAGE(A1:A10) | Пренебрегва празните клетки |
| Максимална стойност | =MAX(A1:A10) | Връща най-голямото число |
| Минимална стойност | =MIN(A1:A10) | Връща най-малкото число |
| Брой числови клетки | =COUNT(A1:A10) | Брои клетки само с числови стойности |
| Брой непразни клетки | =COUNTA(A1:A10) | Брои всяка непразна клетка |
| Условна стойност | =IF(A1>100,"High","Low") | Тристепенна форма: тест, резултат‑при‑истина, резултат‑при‑лъжа |
| Вертикално търсене | =VLOOKUP(D1,A1:B10,2,FALSE) | Точно съвпадение (FALSE) препоръчва се |
| Конкатенирайте низове | =CONCATENATE(A1," ",B1) | Или използвайте =A1&" "&B1 |
| Закръглете число | =ROUND(A1,2) | Вторият arg е брой десетични знаци |
Всички низове с формули трябва да започват с =. Имената на функциите не разпознават регистъра в Excel‑съвместими файлове, но конвенционалната главна форма е показана по‑горе за четимост.
Пълен пример
Следният пример създава набор от данни с пет реда от числови стойности в колона A, след което записва формулите SUM, AVERAGE, MAX и MIN в колона B и запазва резултата в 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")Когато този файл се отвори в Excel или LibreOffice Calc, колона C ще покаже:
| Ред | Формула | Очакван резултат |
|---|---|---|
| C2 | =SUM(A2:A6) | 105 |
| C3 | =AVERAGE(A2:A6) | 21 |
| C4 | =MAX(A2:A6) | 35 |
| C5 | =MIN(A2:A6) | 7 |
Бележки
Низовете с формули трябва да започват с =
Библиотеката съхранява низа както е. Пропускане на водещото = причинява четец на електронни таблици да третира текста като буквален низ, а не като формула.
##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)"Позоваванията за диапазони използват стандартната Excel A1 нотация
Диапазоните от редове и колони се записват като FirstCell:LastCell използвайки колона с главни букви букви и редове, номерирани от 1: "A1:A10", "B2:D5", "C3:C3". Този FOSS библиотеката не превежда или валидира диапазонния низ — невалиден диапазон ще да се съхранява буквално и да предизвика грешка в четеца на електронни таблици при отваряне.
Формулите се съхраняват като низове, без да се изчисляват
Aspose.Cells FOSS does not include a formula engine. If you need the computed резултат от формула в Python (например, за извършване на допълнителни изчисления), изчислете стойността сами и я запишете като статична стойност с .value. Използвайте формули само когато крайният потребител ще отвори файла в приложение за електронни таблици което може да ги изчисли.
Вижте също
- API справка: Пълна документация за класове и методи за
aspose.cells_foss - База от знания: Ръководства за задачи
- Преглед на продукта: Обобщение на функциите и възможностите
- Започване / Инсталация: pip install и настройка
- Блог: Представяне на Aspose.Cells FOSS: Преглед на библиотеката и бърз старт