Un foglio di calcolo.
Dentro la tua applicazione.
sgcSpreadsheet è il nuovo controllo foglio di calcolo in stile Excel di sgcUI. I tuoi utenti digitano valori e formule, lavorano su più fogli e disegnano grafici dalle loro celle. Il tuo codice compila la cartella di lavoro, aggiunge le proprie funzioni e legge e scrive file XLSX che Excel apre.
- VCL
- FireMonkey
- C++ Builder
- WinForms
- WPF
- Avalonia

Prima o poi ogni applicazione aziendale ha bisogno di un foglio di calcolo. Gli utenti pianificano un budget, preparano un preventivo, calcolano costi o controllano i numeri che un cliente ha inviato in un file Excel, e si aspettano formule, più fogli e grafici mentre lo fanno. Una semplice griglia non basta per nulla di tutto questo.
sgcSpreadsheet è un controllo foglio di calcolo in stile Excel costruito su sgcGrid e su un motore di formule condiviso in sgcUICore. Mantiene una vera cartella di lavoro con fogli, nomi definiti e array dinamici, ricalcola solo le celle interessate da una modifica e carica e salva XLSX. Lo stesso motore alimenta i controlli VCL e FireMonkey per Delphi e C++ Builder e i controlli WinForms, WPF e Avalonia per .NET.
sgcSpreadsheet in azione
Formule, array che si espandono, più fogli, grafici in tempo reale e file XLSX su ogni piattaforma. Anche su YouTube.
Formule che i tuoi utenti già conoscono
Chi lavora con i numeri ragiona in formule Excel. In sgcSpreadsheet un testo che inizia con = è una formula, e il motore calcola 211 funzioni di foglio: matematiche, statistiche, di testo, di data e ora, di ricerca, logiche, informative e di array dinamici. Il motore risiede in sgcUICore, quindi le formule di sgcGrid danno gli stessi risultati.
=SUM(B2:B13)=XLOOKUP(C2,…)=Sheet2!A1.=SORT(A2:A20)↓#SPILL! e A1#.B2 → B14 → D3=SUM(Sales)*(1+Rate)'007
Fogli, nomi e array che si espandono
Un foglio di calcolo è una cartella di lavoro con uno o più fogli. Le schede sotto la griglia cambiano foglio e la scheda + ne aggiunge uno, e un foglio rinominato viene rinominato in ogni formula che vi fa riferimento. Dal codice, AddSheet, ActiveSheet e SheetCount gestiscono i fogli, e Grid.Sheets.Names conserva i nomi definiti della cartella di lavoro.
Il metodo seguente compila un listino prezzi, assegna dei nomi ai suoi intervalli e crea un foglio di riepilogo che lo legge. SORT restituisce l'intero elenco dei prodotti, che si espande nelle celle sottostanti, e A1# fa riferimento a quell'intervallo espanso per quanto cresca l'elenco. XLOOKUP trova un prezzo e il nome VAT aggiunge l'imposta.
uses
sgcSpreadsheet_VCL;
procedure TForm1.BuildPriceList;
var
vSummary: Integer;
begin
// Sheet1: a price list, row and column are 0-based, (0, 0) is A1
sgcVCLSpreadsheet1.SetCellInput(0, 0, 'Product');
sgcVCLSpreadsheet1.SetCellInput(0, 1, 'Price');
sgcVCLSpreadsheet1.SetCellInput(1, 0, 'Monitor');
sgcVCLSpreadsheet1.SetCellInput(1, 1, '219');
sgcVCLSpreadsheet1.SetCellInput(2, 0, 'Keyboard');
sgcVCLSpreadsheet1.SetCellInput(2, 1, '49');
sgcVCLSpreadsheet1.SetCellInput(3, 0, 'Mouse');
sgcVCLSpreadsheet1.SetCellInput(3, 1, '25');
// defined names: formulas use them instead of cell addresses
sgcVCLSpreadsheet1.Grid.Sheets.Names.Add('Products', '=Sheet1!$A$2:$A$4');
sgcVCLSpreadsheet1.Grid.Sheets.Names.Add('Prices', '=Sheet1!$B$2:$B$4');
sgcVCLSpreadsheet1.Grid.Sheets.Names.Add('VAT', '0.21');
// a second sheet that reads the first one
vSummary := sgcVCLSpreadsheet1.AddSheet('Summary');
sgcVCLSpreadsheet1.ActiveSheet := vSummary;
// a dynamic array: the sorted names spill into A1:A3
sgcVCLSpreadsheet1.SetCellInput(0, 0, '=SORT(Products)');
// A1# is the whole spilled range, however long the list grows
sgcVCLSpreadsheet1.SetCellInput(0, 2, 'Items');
sgcVCLSpreadsheet1.SetCellInput(0, 3, '=ROWS(A1#)');
// XLOOKUP finds the price of a product, VAT included
sgcVCLSpreadsheet1.SetCellInput(1, 2, 'Monitor');
sgcVCLSpreadsheet1.SetCellInput(1, 3, '=XLOOKUP(C2,Products,Prices)*(1+VAT)');
// every sheet, formula and name goes to a file that Excel opens
sgcVCLSpreadsheet1.SaveToXLSX('prices.xlsx');
end;
Il riepilogo mostra i tre prodotti in ordine, 3 elementi e 264,99 per il monitor. Cambia un prezzo nel primo foglio e solo le celle che ne dipendono vengono ricalcolate. FreezePanes(1, 0) mantiene fissa una riga di intestazione mentre il resto del foglio scorre, e le barre della formula TsgcVCLSpreadsheetFormulaBar e TsgcFMXSpreadsheetFormulaBar offrono ai tuoi utenti una casella del nome e la formula della cella corrente.
Le tue funzioni
Le applicazioni di ingegneria, finanza e laboratorio hanno bisogno di calcoli propri. Il motore di formule dispone di un registro delle funzioni, e una funzione registrata al suo interno funziona in ogni formula del foglio di calcolo, di sgcGrid e di un TsgcCalcEvaluator, esattamente come una funzione integrata. Il gestore è una semplice funzione, registrata dalla sezione initialization di una unit.
unit MyFunctions;
interface
implementation
uses
sgcUICore_Calc;
{ =MARKUP(price, [rate]): the price plus a margin, 20% by default }
function DoMarkup(aCall: TsgcCalcCall): Variant;
var
vPrice, vRate: Double;
vError: string;
begin
vError := aCall.Number(0, vPrice);
vRate := 0.2;
if (vError = '') and (aCall.Count > 1) then
vError := aCall.Number(1, vRate);
if vError <> '' then
Result := vError
else
Result := vPrice * (1 + vRate);
end;
initialization
// MARKUP takes 1 or 2 arguments
sgcCalcRegisterFunction('MARKUP', DoMarkup, 1, 2);
end.
Aggiungi la unit al progetto e i tuoi utenti potranno digitare =MARKUP(B2). Con gli array dinamici il motore chiama la funzione per ogni elemento di un argomento array, quindi =MARKUP(B2:B4, 0.3) espande un risultato per ogni prezzo e =SUM(MARKUP(B2:B4)) funziona senza codice aggiuntivo. Una funzione che ha bisogno delle celle di un intervallo viene registrata con il flag cfRanges e le percorre con un iteratore.
Grafici da intervalli di celle
Un grafico mostra i valori di un intervallo di celle e fluttua sopra il foglio, come un grafico in Excel. Viene disegnato da sgcCharts e, quando cambia una cella dell'intervallo, o una formula dell'intervallo restituisce un nuovo valore, il grafico si aggiorna. Gli utenti spostano e ridimensionano i grafici con il mouse, e ogni foglio ha i propri grafici.
- 7 tipi di grafico: colonne, barre, linee, area, torta, anello e dispersione.
AddChartcon un intervallo come'A1:D10'o'Sheet1!A1:D10', con i nomi delle serie e le categorie letti dalla riga e dalla colonna di intestazione.TsgcSpreadsheetChartscontiene i grafici di ogni foglio, eSaveToXLSXli scrive come grafici che Excel apre.
XLSX in ingresso, XLSX in uscita
I clienti inviano file XLSX e si aspettano file XLSX in risposta. LoadFromXLSX legge ogni foglio di una cartella di lavoro e SaveToXLSX scrive ogni foglio, da un nome di file o da uno stream, così un file fa il giro completo tra la tua applicazione ed Excel.
- Valori, formule e formati di cella.
- Nomi definiti e array dinamici.
- Riquadri bloccati e larghezze delle colonne.
- Grafici, salvati come grafici che Excel apre.
VCL, FireMonkey e .NET
Delphi e C++ Builder dispongono di TsgcVCLSpreadsheet per VCL e TsgcFMXSpreadsheet per FireMonkey, ciascuno con la propria barra della formula. Per .NET ci sono TsgcWinFormsSpreadsheet, TsgcWpfSpreadsheet e TsgcAvaloniaSpreadsheet, anch'essi con barre della formula, nei pacchetti NuGet esegece.sgcSpreadsheet, esegece.sgcSpreadsheet.WinForms, esegece.sgcSpreadsheet.Wpf e esegece.sgcSpreadsheet.Avalonia. I controlli .NET usano gli stessi nomi di quelli Delphi, e una funzione personalizzata può essere una lambda.
using esegece.sgcSpreadsheet;
using esegece.sgcUICore;
// once at startup, before the first formula is parsed
sgcUICore_Calc.sgcCalcRegisterFunction("MARKUP", aCall =>
{
double vPrice;
double vRate = 0.2;
string vError = aCall.Number(0, out vPrice);
if ((vError.Length == 0) && (aCall.Count > 1))
vError = aCall.Number(1, out vRate);
if (vError.Length > 0)
return vError;
return vPrice * (1 + vRate);
}, 1, 2);
// sheet is a TsgcWinFormsSpreadsheet: open a workbook made in Excel
sheet.LoadFromXLSX("prices.xlsx");
sheet.ActiveSheet = 0;
// the custom function spills over the whole price column
sheet.SetCellInput(0, 2, "=MARKUP(B2:B4, 0.3)");
// a column chart of the range, drawn by sgcCharts
TsgcSpreadsheetChart chart = sheet.AddChart(TsgcSpreadsheetChartType.sctColumn, "A1:B4");
chart.Title = "Prices";
sheet.SaveToXLSX("prices-markup.xlsx");
Esegui le demo
Le demo Delphi e C++ Builder si installano con la versione di prova di sgcUI, e le demo .NET sono incluse nel download .NET Registered.

- Basic: una cartella di lavoro di vendite creata nel codice con SUM, AVERAGE, IF e XLOOKUP, un foglio di riepilogo che la legge, una riga di intestazione bloccata, la barra della formula e Apri e Salva come XLSX.
- Functions: funzioni matematiche, di testo, di data e ora, di ricerca e di array dinamici, un foglio per categoria, con ogni formula accanto al suo risultato.
- Charts: grafici a colonne, a linee e a torta da intervalli di celle. Modifica un ricavo o un costo e i grafici si aggiornano.
- CustomFunction, BasicFMX e ChartsFMX: funzioni registrate dall'applicazione, e le demo Basic e Charts su FireMonkey. Basic e Charts sono disponibili anche come progetti C++ Builder.
- .NET: SpreadsheetBasic per WinForms, SpreadsheetBasicWpf, SpreadsheetBasicAvalonia, SpreadsheetFunctions, SpreadsheetCharts and SpreadsheetCustomFunction.
Dove è incluso sgcSpreadsheet
sgcSpreadsheet è incluso in sgcUI Enterprise e nel bundle All-Access, e si acquista anche singolarmente come pacchetto unico per Delphi e C++ Builder e per .NET. L'installazione di sgcSpreadsheet installa anche sgcGrid e sgcCharts, quindi la griglia e i grafici funzionano sempre. Non esiste una edizione Community gratuita. Consulta la pagina dei prezzi per i dettagli.
Offri ai tuoi utenti un foglio di calcolo
sgcSpreadsheet fa parte di sgcUI per Delphi e C++ Builder, su VCL e FireMonkey, e per .NET su WinForms, WPF e Avalonia.
Domande o suggerimenti? Contattaci, riceverai una risposta da chi ha scritto il codice.
