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

Обзор

Aspose.Cells FOSS хранит формулы в виде совместимых со Excel строк. Библиотека не вычисляет формулы внутренне — она сохраняет выражение дословно в файле, а приложение для работы с электронными таблицами (Excel, LibreOffice Calc или любой совместимый просмотрщик) вычисляет результат при открытии файла.

Существует два способа разместить формулу в ячейке:

  1. Конструктор Cellws.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.

PurposeFormula stringNotes
Суммировать диапазон=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". Библиотека с открытым исходным кодом не переводит и не проверяет строку диапазона — недопустимый диапазон будет сохранён дословно и вызовет ошибку в считывателе таблиц при открытии.

Формулы хранятся как строки, не вычисляются

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

См. также

 Русский