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:
- Constructor de celda —
ws.cells["A4"] = Cell(None, "=SUM(A1:A3)") .formulapropiedad —ws.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ósito | Cadena de fórmula | Notas |
|---|---|---|
| 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á:
| Fila | Fórmula | Resultado 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
- Referencia de API: Documentación completa de clases y métodos para
aspose.cells_foss - Base de Conocimientos: Guías prácticas orientadas a tareas
- Resumen del Producto: Resumen de características y capacidades
- Comenzar / Instalación: pip install y configuración
- Blog: Presentando Aspose.Cells FOSS: Visión general de la biblioteca y guía rápida