使用公式

概述

Aspose.Cells FOSS 将公式存储为 Excel 兼容的字符串。该库不会在内部评估公式——它在文件中原样保留表达式,电子表格应用程序(Excel、LibreOffice Calc 或任何兼容的阅读器)在打开文件时计算结果。

在单元格中放置公式有两种方法:

  1. Cell 构造函数 — 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 对于任何使用 Cell(None, formula) 创建的单元格来说是 None
如果加载一个先前已保存且在公式旁缓存了计算值的工作簿,.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 不包含公式引擎。如果您需要计算
公式在 Python 中的结果(例如,为了进行进一步计算),
请自行计算该值并使用 .value 将其写入为静态值。使用
公式仅在最终用户将在能够评估公式的电子表格应用程序中打开文件时使用。

另请参阅

 中文