Trabajando con fórmulas

Visión general

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.

Hay dos formas de colocar una fórmula en una celda:

  1. Constructor de celda – ws.cells["A4"] = Cell(None, "=SUM(A1:A3)")
  2. .formula propiedad â– ws.cells["A4"].formula = "=SUM(A1:A3)"

Ambos enfoques almacenan los mismos datos. La forma del constructor es compacta cuando está creando una hoja desde cero; la forma de la propiedad es más natural cuando ya tiene una referencia a una celda existente y desea adjuntar una fórmula a ella.


Establecer una fórmula mediante el constructor Cell

El Cell la firma del constructor es Cell(value, formula). Para crear una celda de fórmula, pasa None como el valor y la cadena de expresión como el segundo argumento:

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")

Configuración value=None hace explícito que la celda no tiene un valor estático — su el contenido mostrado proviene completamente de la fórmula. Pasar un no-None valor junto a una fórmula está permitido pero es inusual; la mayoría de los lectores de hojas de cálculo mostrarán el resultado de la fórmula e ignorarán el valor almacenado.


Estableciendo una fórmula a través de la .formula Propiedad

Asignar directamente a cell.formula cuando ya tienes una referencia a una celda o cuando quieres añadir una fórmula a una celda que previamente se escribió con un valor:

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")

Leyendo una fórmula de vuelta

Después de escribir una celda con fórmula, usa .formula para recuperar la cadena de expresión y .value para recuperar cualquier valor estático (si lo hay) que se almacenó junto a él.

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)

En la práctica, .value es None para cualquier celda creada con Cell(None, formula). Si cargas un libro de trabajo existente que se guardó previamente con valores calculados almacenados en caché junto a las fórmulas, .value puede devolver el último resultado en caché — pero esto el comportamiento depende de cómo la aplicación de origen guardó el archivo y debería no confiarse para cálculos nuevos.

Para distinguir una celda de fórmula de una celda de valor simple en tiempo de ejecución:

cell = ws.cells["A1"]
if cell.formula:
    print(f"Formula cell: {cell.formula}")
else:
    print(f"Value cell: {cell.value}")

Fórmulas comunes de Excel

La tabla siguiente enumera las funciones de Excel más usadas con cadenas de fórmulas de ejemplo que puedes pasar directamente a Aspose.Cells FOSS.

PropósitoCadena de fórmulaNotas
Sumar un rango=SUM(A1:A10)Suma todos los valores numéricos del rango
Promedio de un rango=AVERAGE(A1:A10)Ignora celdas en blanco
Valor máximo=MAX(A1:A10)Devuelve el número más grande
Valor mínimo=MIN(A1:A10)Devuelve el número más pequeño
Contar celdas numéricas=COUNT(A1:A10)Cuenta celdas con valores numéricos únicamente
Cuenta celdas no vacías=COUNTA(A1:A10)Cuenta cualquier celda no vacía
Valor condicional=IF(A1>100,"High","Low")Forma de tres argumentos: prueba, resultado-verdadero, resultado-falso
Búsqueda vertical=VLOOKUP(D1,A1:B10,2,FALSE)Coincidencia exacta (FALSE) recomendado
Concatenar cadenas=CONCATENATE(A1," ",B1)O usar =A1&" "&B1
Redondear un número=ROUND(A1,2)El segundo argumento indica los decimales

Todas las cadenas de fórmula deben comenzar con =. Los nombres de funciones no distinguen mayúsculas de minúsculas en archivos compatibles con Excel, pero la forma convencional en mayúsculas se muestra arriba para legibilidad.


Ejemplo completo

El siguiente ejemplo crea un conjunto de datos de cinco filas con valores numéricos en la columna A, luego escribe las fórmulas SUM, AVERAGE, MAX y MIN en la columna B, y guarda el resultado en un archivo 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")

Cuando este archivo se abre en Excel o LibreOffice Calc, la columna C mostrará:

FilaFórmulaResultado esperado
C2=SUM(A2:A6)105
C3=AVERAGE(A2:A6)21
C4=MAX(A2:A6)35
C5=MIN(A2:A6)7

Notas

Las cadenas de fórmula deben comenzar con =

La biblioteca almacena la cadena tal cual. Omitir el = causa el lector de hojas de cálculo para tratar el texto como una cadena literal en lugar de una fórmula.

##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)"

Las referencias de rango usan la notación estándar A1 de Excel

Los rangos de fila-columna se escriben como FirstCell:LastCell usando columnas en mayúsculas letras y números de fila basados en uno: "A1:A10", "B2:D5", "C3:C3". El FOSS la biblioteca no traduce ni valida la cadena de rango — un rango inválido será almacenado literalmente y provocará un error en el lector de hojas de cálculo al abrirlo.

Las fórmulas se almacenan como cadenas, no se evalúan

Aspose.Cells FOSS does not include a formula engine. If you need the computed resultado de una fórmula en Python (por ejemplo, para realizar cálculos adicionales), calcula el valor tú mismo y escríbelo como un valor estático con .value. Usa fórmulas solo cuando el usuario final abrirá el archivo en una aplicación de hoja de cálculo que pueden evaluarlos.

Ver también

 Español