Modi per Calcolare le Formule
Introduzione
Aspose.Cells ha un motore di calcolo delle formule integrato. Può non solo ricalcolare le formule importate dai modelli del designer ma supporta anche il calcolo dei risultati delle formule aggiunte in fase di esecuzione.
Aggiungere Formule & Calcolare i Risultati
Aspose.Cells supporta la maggior parte delle formule o funzioni che fanno parte di Microsoft Excel. Possono essere utilizzate tramite l’API o utilizzando i fogli di calcolo del designer. Aspose.Cells supporta un vasto insieme di formule matematiche, stringhe, booleani, date/orario, statistiche, ricerca e riferimento.
Utilizzare il metodo Cell.SetFormula per aggiungere una formula a una cella. Quando si applica una formula a una cella, iniziare sempre la stringa con un segno uguale (=) come si fa quando si crea una formula in Microsoft Excel. Utilizzare una virgola (,) per delimitare i parametri della funzione.
Per calcolare i risultati delle formule, chiamare il metodo Workbook.CalculateFormula() che elabora tutte le formule incorporate in un file Excel. Si prega di controllare il seguente codice di esempio che aggiunge la formula e ne calcola i risultati. Si prega di controllare il file di Excel di output generato con questo codice.
Codice di Esempio
Aspose::Cells::Startup(); | |
//For complete examples and data files, please go to https://github.com/aspose-cells/Aspose.Cells-for-C | |
//Output directory path | |
U16String outPath(u"..\\Data\\Output\\"); | |
//Path of output excel file | |
U16String outputAddingFormulasAndCalculatingResults = outPath + u"outputAddingFormulasAndCalculatingResults.xlsx"; | |
//Create workbook | |
Workbook wb; | |
//Access first worksheet in the workbook | |
Worksheet ws = wb.GetWorksheets().Get(0); | |
//Adding integer values to cells A1, A2 and A3 | |
ws.GetCells().Get(u"A1").PutValue(10); | |
ws.GetCells().Get(u"A2").PutValue(20); | |
ws.GetCells().Get(u"A3").PutValue(70); | |
//Adding a SUM formula to "A4" cell | |
ws.GetCells().Get(u"A4").SetFormula(u"=SUM(A1:A3)"); | |
//Calculating the results of formulas | |
wb.CalculateFormula(); | |
//Get the calculated value of the cell | |
U16String strVal = ws.GetCells().Get(u"A4").GetStringValue(); | |
//Print the calculated value on console | |
std::cout << "Calculated Result: " << strVal.ToUtf8() <<std::endl; | |
//Saving the workbook | |
wb.Save(outputAddingFormulasAndCalculatingResults); | |
Aspose::Cells::Cleanup(); |
Calcolare le Formule Solo una Volta
Quando si chiama Workbook.CalculateFormula() per calcolare i valori delle formule in un modello di cartella di lavoro, Aspose.Cells crea una catena di calcolo. Aumenta le prestazioni quando le formule vengono calcolate per la seconda o terza volta.
Tuttavia, se il modello contiene molte formule, la prima volta che la formula viene calcolata può consumare molto tempo di elaborazione della CPU e memoria.
Aspose.Cells ti consente di disattivare la creazione di una catena di calcolo, utile quando si vuole calcolare le formule solo una volta.
Si prega di chiamare Workbook.GetISettings().SetCreateCalcChain() con il parametro false. È possibile utilizzare il file Excel fornito per testare questo codice.
Codice di Esempio
Aspose::Cells::Startup(); | |
//For complete examples and data files, please go to https://github.com/aspose-cells/Aspose.Cells-for-C | |
//Source directory path | |
U16String dirPath(u"..\\Data\\Formulas\\"); | |
//Path of input excel file | |
U16String sampleCalculatingFormulasOnceOnly = dirPath + u"sampleCalculatingFormulasOnceOnly.xlsx"; | |
//Create workbook | |
Workbook wb(sampleCalculatingFormulasOnceOnly); | |
//Set the CreateCalcChain as false | |
wb.GetSettings().GetFormulaSettings().SetEnableCalculationChain(false); | |
//Get the time before formula calculationint | |
auto startTime = std::chrono::system_clock::now(); | |
//Calculate the workbook formulas | |
wb.CalculateFormula(); | |
//Get the time after formula calculation | |
auto interval = std::chrono::system_clock::now() - startTime; | |
long long time = std::chrono::duration_cast<std::chrono::milliseconds>(interval).count(); | |
std::cout << "Workbook Formula Calculation Elapsed Time in Milliseconds: " << time << std::endl; | |
Aspose::Cells::Cleanup(); |