Wege zur Berechnung von Formeln

Einführung

Aspose.Cells verfügt über einen integrierten Formelberechnungsmotor. Es kann nicht nur Formeln, die aus Designer-Vorlagen importiert wurden, neu berechnen, sondern unterstützt auch das Berechnen der Ergebnisse von Formeln, die zur Laufzeit hinzugefügt wurden.

Hinzufügen von Formeln & Berechnen von Ergebnissen

Aspose.Cells unterstützt die meisten Formeln oder Funktionen, die Teil von Microsoft Excel sind. Sie können über die API oder über Designer-Tabellenkalkulationstabellen verwendet werden. Aspose.Cells unterstützt eine große Menge mathematischer, string, boolescher, Datum/Uhrzeit-, statistischer, Such- und Bezugsformeln.

Verwenden Sie die Cell.SetFormula-Methode, um einer Zelle eine Formel hinzuzufügen. Beim Anwenden einer Formel auf eine Zelle sollten Sie die Zeichenfolge immer mit einem Gleichheitszeichen (=) beginnen, wie Sie es bei der Erstellung einer Formel in Microsoft Excel tun. Verwenden Sie ein Komma (,) zur Trennung der Funktionsparameter.

Um die Ergebnisse von Formeln zu berechnen, rufen Sie die Workbook.CalculateFormula()-Methode auf, die alle in einer Excel-Datei eingebetteten Formeln verarbeitet. Bitte beachten Sie den folgenden Beispielcode, der die Formel hinzufügt und ihre Ergebnisse berechnet. Bitte überprüfen Sie die ausgegebene Excel-Datei, die mit diesem Code generiert wurde.

Beispielcode

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();

Einmaliges Berechnen von Formeln

Wenn Workbook.CalculateFormula() aufgerufen wird, um die Werte von Formeln in einer Arbeitsmappen-Vorlage zu berechnen, erstellt Aspose.Cells eine Berechnungskette. Dies erhöht die Leistung, wenn Formeln das zweite oder dritte Mal berechnet werden.

Wenn die Vorlage jedoch viele Formeln enthält, kann das erste Mal, wenn die Formel berechnet wird, viel CPU-Verarbeitungszeit und Speicher in Anspruch nehmen.

Aspose.Cells ermöglicht es Ihnen, das Erstellen einer Berechnungskette auszuschalten, was nützlich ist, wenn Sie Formeln nur einmal berechnen möchten.

Bitte rufen Sie Workbook.GetISettings().SetCreateCalcChain() mit dem Parameter false auf. Sie können die bereitgestellte Excel-Datei verwenden, um diesen Code zu testen.

Beispielcode

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();