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:

  1. Construtor de célula — ws.cells["A4"] = Cell(None, "=SUM(A1:A3)")
  2. .formula propriedade — 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.

ObjetivoString da fórmulaObservaçõ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á:

LinhaFórmulaResultado 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

 Português