Lavorare con le formule

Panoramica

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.

Ci sono due modi per inserire una formula in una cella:

  1. Costruttore di cella — ws.cells["A4"] = Cell(None, "=SUM(A1:A3)")
  2. .formula proprietà — ws.cells["A4"].formula = "=SUM(A1:A3)"

Entrambi gli approcci memorizzano gli stessi dati. La forma costruttore è compatta quando si costruisce un foglio da zero; la forma proprietà è più naturale quando si ha già un riferimento a una cella esistente e si desidera allegare una formula.


Impostare una formula tramite il costruttore Cell

Il Cell la firma del costruttore è Cell(value, formula). Per creare una pura cella di formula, passa None come valore e la stringa dell’espressione come secondo argomento:

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")

Impostare value=None rende esplicito che la cella non ha un valore statico — il suo contenuto visualizzato proviene interamente dalla formula. Passare un non-None valore insieme a una formula è consentito ma insolito; la maggior parte dei lettori di fogli di calcolo visualizzerà il risultato della formula e ignorerà il valore memorizzato.


Impostare una formula tramite il .formula Proprietà

Assegna direttamente a cell.formula quando hai già un riferimento di cella o quando vuoi aggiungere una formula a una cella che era stata precedentemente scritta con un valore:

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")

Leggere una formula

Dopo aver scritto una cella con formula, usa .formula per recuperare la stringa dell’espressione e .value per recuperare qualsiasi valore statico (se presente) che era stato memorizzato accanto ad essa.

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)

In pratica, .value è None per qualsiasi cella creata con Cell(None, formula). Se carichi una cartella di lavoro esistente che era stata precedentemente salvata con valori calcolati memorizzati nella cache accanto alle formule, .value potrebbe restituire l’ultimo risultato memorizzato nella cache — ma questo il comportamento dipende da come l’applicazione di origine ha salvato il file e dovrebbe non essere considerato affidabile per calcoli nuovi.

Per distinguere una cella formula da una cella a valore semplice a runtime:

cell = ws.cells["A1"]
if cell.formula:
    print(f"Formula cell: {cell.formula}")
else:
    print(f"Value cell: {cell.value}")

Formule Excel comuni

La tabella seguente elenca le funzioni Excel più usate con stringhe di formula di esempio che puoi passare direttamente a Aspose.Cells FOSS.

ScopoStringa della formulaNote
Somma un intervallo=SUM(A1:A10)Somma tutti i valori numerici nell’intervallo
Media di un intervallo=AVERAGE(A1:A10)Ignora le celle vuote
Valore massimo=MAX(A1:A10)Restituisce il numero più grande
Valore minimo=MIN(A1:A10)Restituisce il numero più piccolo
Conta le celle numeriche=COUNT(A1:A10)Conta solo le celle con valori numerici
Conta le celle non vuote=COUNTA(A1:A10)Conta qualsiasi cella non vuota
Valore condizionale=IF(A1>100,"High","Low")Forma a tre argomenti: test, risultato‑vero, risultato‑falso
Ricerca verticale=VLOOKUP(D1,A1:B10,2,FALSE)Corrispondenza esatta (FALSE) consigliata
Concatena le stringhe=CONCATENATE(A1," ",B1)Oppure usa =A1&" "&B1
Arrotonda un numero=ROUND(A1,2)Il secondo argomento è il numero di decimali

Tutte le stringhe di formula devono iniziare con =. I nomi delle funzioni non distinguono tra maiuscole e minuscole in file compatibili con Excel, ma la forma convenzionale in maiuscolo è mostrata sopra per la leggibilità.


Esempio completo

L’esempio seguente crea un set di dati di cinque righe di valori numerici nella colonna A, quindi scrive le formule SUM, AVERAGE, MAX e MIN nella colonna B e salva il risultato in un file 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 questo file viene aperto in Excel o LibreOffice Calc, la colonna C mostrerà:

RigaFormulaRisultato atteso
C2=SUM(A2:A6)105
C3=AVERAGE(A2:A6)21
C4=MAX(A2:A6)35
C5=MIN(A2:A6)7

Note

Le stringhe di formula devono iniziare con =

La libreria memorizza la stringa così com’è. Omettere il carattere iniziale = causa il lettore di fogli di calcolo di interpretare il testo come una stringa letterale anziché come una formula.

##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)"

I riferimenti di intervallo usano la notazione standard Excel A1

Gli intervalli riga-colonna sono scritti come FirstCell:LastCell usando lettere di colonna maiuscole e numeri di riga basati su 1: "A1:A10", "B2:D5", "C3:C3". Il FOSS libreria non traduce né valida la stringa di intervallo — un intervallo non valido verrà memorizzato letteralmente e causerà un errore nel lettore di fogli di calcolo al momento dell’apertura.

Le formule sono memorizzate come stringhe, non valutate

Aspose.Cells FOSS does not include a formula engine. If you need the computed risultato di una formula in Python (ad esempio, per eseguire ulteriori calcoli), calcola il valore da solo e scrivilo come valore statico con .value. Usa formule solo quando l’utente finale aprirà il file in un’applicazione di foglio di calcolo che può valutarle.

Vedi anche

 Italiano