Trabalhando com Fórmulas
Visão geral
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.
Existem duas maneiras de colocar uma fórmula em uma célula:
- Construtor de célula —
ws.cells["A4"] = Cell(None, "=SUM(A1:A3)") .formulapropriedade —ws.cells["A4"].formula = "=SUM(A1:A3)"
Ambas as abordagens armazenam os mesmos dados. A forma do construtor é compacta quando você está construindo uma planilha do zero; a forma da propriedade é mais natural quando você já tem uma referência a uma célula existente e deseja anexar uma fórmula a ela.
Definindo uma Fórmula via o Construtor Cell
O Cell a assinatura do construtor é Cell(value, formula). Para criar um puro célula de fórmula, passe None como o valor e a string de expressão como o 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")Configuração value=None torna explícito que a célula não tem valor estático — seu conteúdo exibido vem inteiramente da fórmula. Passar um não-None valor junto a uma fórmula é permitido, mas incomum; a maioria dos leitores de planilhas exibirá o resultado da fórmula e ignorará o valor armazenado.
Definindo uma Fórmula via o .formula Propriedade
Atribua diretamente a cell.formula quando você já possui uma referência de célula ou quando você deseja adicionar uma fórmula a uma célula que foi previamente escrita com um 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")Lendo uma Fórmula de Volta
Depois de escrever uma célula de fórmula, use .formula para recuperar a string de expressão e .value para recuperar qualquer valor estático (se houver) que foi armazenado ao lado dele.
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)Na prática, .value é None para qualquer célula criada com Cell(None, formula). Se você carregar uma pasta de trabalho existente que foi salva anteriormente com valores calculados armazenados em cache ao lado das fórmulas, .value pode retornar o último resultado em cache — mas isso o comportamento depende de como o aplicativo de origem salvou o arquivo e deve não ser confiável para cálculos novos.
Para distinguir uma célula de fórmula de uma célula de valor simples em tempo de execução:
cell = ws.cells["A1"]
if cell.formula:
print(f"Formula cell: {cell.formula}")
else:
print(f"Value cell: {cell.value}")Fórmulas Comuns do Excel
A tabela a seguir lista funções do Excel usadas com frequência, com strings de fórmula de exemplo que você pode passar diretamente para Aspose.Cells FOSS.
| Objetivo | String da fórmula | Observações |
|---|---|---|
| Somar um intervalo | =SUM(A1:A10) | Adiciona todos os valores numéricos no intervalo |
| Média de um intervalo | =AVERAGE(A1:A10) | Ignora células vazias |
| Valor máximo | =MAX(A1:A10) | Retorna o maior número |
| Valor mínimo | =MIN(A1:A10) | Retorna o menor número |
| Contar células numéricas | =COUNT(A1:A10) | Conta células apenas com valores numéricos |
| Conta células não vazias | =COUNTA(A1:A10) | Conta qualquer célula não vazia |
| Valor condicional | =IF(A1>100,"High","Low") | Forma de três argumentos: teste, resultado verdadeiro, resultado falso |
| Busca vertical | =VLOOKUP(D1,A1:B10,2,FALSE) | Correspondência exata (FALSE) recomendado |
| Concatenar strings | =CONCATENATE(A1," ",B1) | Ou use =A1&" "&B1 |
| Arredondar um número | =ROUND(A1,2) | O segundo argumento indica casas decimais |
Todas as strings de fórmula devem começar com =. Nomes de funções não diferenciam maiúsculas de minúsculas em arquivos compatíveis com Excel, mas a forma convencional em maiúsculas é mostrada acima para legibilidade.
Exemplo Completo
O exemplo a seguir cria um conjunto de dados de cinco linhas com valores numéricos na coluna A, depois grava as fórmulas SUM, AVERAGE, MAX e MIN na coluna B e salva o resultado em um arquivo 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")Quando este arquivo for aberto no Excel ou no LibreOffice Calc, a coluna C exibirá:
| Linha | Fórmula | Resultado esperado |
|---|---|---|
| C2 | =SUM(A2:A6) | 105 |
| C3 | =AVERAGE(A2:A6) | 21 |
| C4 | =MAX(A2:A6) | 35 |
| C5 | =MIN(A2:A6) | 7 |
Observações
Strings de fórmula devem começar com =
A biblioteca armazena a string como está. Omitir o início = causa o leitor de planilha para tratar o texto como uma string literal em vez de uma 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)"Referências de intervalo usam a notação padrão A1 do Excel
Os intervalos de linha-coluna são escritos como FirstCell:LastCell usando letras de coluna maiúsculas e números de linha baseados em 1: "A1:A10", "B2:D5", "C3:C3". O FOSS biblioteca não traduz nem valida a string de intervalo — um intervalo inválido será armazenado literalmente e causará um erro no leitor de planilha ao abrir.
As fórmulas são armazenadas como strings, não avaliadas
Aspose.Cells FOSS does not include a formula engine. If you need the computed resultado de uma fórmula em Python (por exemplo, para realizar cálculos adicionais), calcule o valor você mesmo e escreva‑o como um valor estático com .value. Use fórmulas somente quando o usuário final abrir o arquivo em um aplicativo de planilha que pode avaliá-los.
Veja Também
- Referência da API: Documentação completa de classes e métodos para
aspose.cells_foss - Base de Conhecimento: Guias práticos orientados por tarefas
- Visão Geral do Produto: Resumo de recursos e capacidades
- Introdução / Instalação: pip install e configuração
- Blog: Apresentando Aspose.Cells FOSS: Visão geral da biblioteca e início rápido