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:
- 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 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ósito | Cadena de fórmula | Notas |
|---|---|---|
| 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á:
| 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 = 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
- 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
- Visión general del producto: Resumen de características y capacidades
- Comenzando / Instalación: pip install y configuración
- Blog: Presentando Aspose.Cells FOSS: Visión general de la biblioteca y comienzo rápido