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

Огляд

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.

Існує два способи розмістити формулу в клітинці:

  1. Конструктор комірки – ws.cells["A4"] = Cell(None, "=SUM(A1:A3)")
  2. .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)Другий аргумент — кількість десяткових знаків

Усі рядки формул мають починатися з =. Імена функцій не залежать від регістру в файлах, сумісних з Excel, але традиційна форма у верхньому регістрі показана вище для читабельності.


Повний приклад

У наведеному прикладі створюється набір даних з п’яти рядків числових значень у колонці A, потім у колонку B записуються формули SUM, AVERAGE, MAX і MIN, і результат зберігається у файл 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. Використовуйте формули лише тоді, коли кінцевий користувач відкриватиме файл у програмі для електронних таблиць яка може їх обчислювати.

Див. також

 Українська