Trabajando con fórmulas

Descripción general

Aspose.Cells FOSS almacena las fórmulas como cadenas compatibles con Excel.
La biblioteca no
evalúa las fórmulas internamente — conserva la expresión literalmente en el
archivo, y la aplicación de hoja de cálculo (Excel, LibreOffice Calc o cualquier compatible
lector) calcula el resultado cuando se abre el archivo.

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

  1. Constructor de celdaws.cells["A4"] = Cell(None, "=SUM(A1:A3)")
  2. .formula propiedadws.cells["A4"].formula = "=SUM(A1:A3)"

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


Establecer una fórmula mediante el constructor de celdas

La firma del constructor Cell es Cell(value, formula). Para crear una celda de fórmula pura, 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")

Configurar value=None hace explícito que la celda no tiene un valor estático — su contenido mostrado proviene completamente de la fórmula. Pasar un valor no None junto con 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.


Establecer una fórmula mediante la .formula Propiedad

Asignar directamente a cell.formula cuando ya tienes una referencia de celda o cuando deseas agregar 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")

Lectura de una fórmula hacia atrás

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

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 este
comportamiento depende de cómo la aplicación de origen guardó el archivo y debería
no confiarse en él 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 siguiente tabla enumera las funciones de Excel de uso frecuente con cadenas de fórmulas de ejemplo que puedes pasar directamente a Aspose.Cells FOSS.

PropósitoCadena de fórmulaNotas
Sum a range=SUM(A1:A10)Suma todos los valores numéricos del rango
Average of a range=AVERAGE(A1:A10)Ignora celdas vacías
Maximum value=MAX(A1:A10)Devuelve el número más grande
Minimum value=MIN(A1:A10)Devuelve el número más pequeño
Count numeric cells=COUNT(A1:A10)Cuenta solo celdas con valores numéricos
Count non-empty cells=COUNTA(A1:A10)Cuenta cualquier celda no vacía
Conditional value=IF(A1>100,"High","Low")Forma de tres argumentos: prueba, resultado-verdadero, resultado-falso
Vertical lookup=VLOOKUP(D1,A1:B10,2,FALSE)Coincidencia exacta (FALSE) recomendada
Concatenate strings=CONCATENATE(A1," ",B1)O use =A1&" "&B1
Round a number=ROUND(A1,2)El segundo argumento son los decimales

Todas las cadenas de fórmula deben comenzar con =. Los nombres de funciones no distinguen entre mayúsculas y 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 prefijo = hace que el lector de hojas de cálculo trate 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 utilizan la notación estándar de Excel A1

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

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

Aspose.Cells FOSS no incluye un motor de fórmulas. Si necesitas el resultado
calculado 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 pueda evaluarlas.

Ver también

 Español