Работа с формули

Преглед

Aspose.Cells FOSS съхранява формулите като съвместими с Excel низове. Библиотеката не изчислява формулите вътрешно — запазва израза буквално във файла, а приложението за електронни таблици (Excel, LibreOffice Calc или всяко съвместимо четец) изчислява резултата, когато файлът се отвори.

Има два начина да поставите формула в клетка:

  1. Конструктор на клеткаws.cells["A4"] = Cell(None, "=SUM(A1:A3)")
  2. .formula свойствоws.cells["A4"].formula = "=SUM(A1:A3)"

И двата подхода съхраняват еднакви данни. Формата на конструктора е компактна, когато създавате
лист от нулата; формата на свойството е по‑естествена, когато вече
имате препратка към съществуваща клетка и искате да прикрепите формула към нея.


Задаване на формула чрез конструктора на клетки

Конструкторският подпис на 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)Вторият аргумент е брой десетични знаци

Всички низове на формули трябва да започват с =. Имената на функциите не правят разлика между малки и големи букви в файлове, съвместими с 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, използвайки главни букви за колоните и едно‑базирани номера на редовете: "A1:A10", "B2:D5", "C3:C3". FOSS библиотеката не превежда или валидира низа на диапазона — невалиден диапазон ще бъде съхранен буквално и ще предизвика грешка в четеца на електронни таблици при отваряне.

Формулите се съхраняват като низове, без да се оценяват

Aspose.Cells FOSS не включва формулен двигател. Ако ви е необходим изчисленият резултат от формула в Python (например, за извършване на допълнителни изчисления), изчислете стойността сами и я запишете като статична стойност с .value. Използвайте формули само когато крайният потребител ще отвори файла в приложение за електронни таблици което може да ги оценява.

Вижте също

 Български