Работа с формули
Преглед
Aspose.Cells FOSS съхранява формулите като съвместими с Excel низове. Библиотеката не изчислява формулите вътрешно — запазва израза буквално във файла, а приложението за електронни таблици (Excel, LibreOffice Calc или всяко съвместимо четец) изчислява резултата, когато файлът се отвори.
Има два начина да поставите формула в клетка:
- Конструктор на клетка —
ws.cells["A4"] = Cell(None, "=SUM(A1:A3)") .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. Използвайте
формули само когато крайният потребител ще отвори файла в приложение за електронни таблици
което може да ги оценява.
Вижте също
- API Reference: Пълна документация за класове и методи за
aspose.cells_foss - Knowledge Base: Ръководства за изпълнение на задачи
- Product Overview: Обобщение на функциите и възможностите
- Getting Started / Installation: pip install и настройка
- Blog: Introducing Aspose.Cells FOSS: Преглед на библиотеката и бърз старт