Sätt att beräkna formler

Introduktion

Aspose.Cells har en inbyggd formelberäkningsmotor. Den kan inte bara omberäkna formler som importerats från mallar utan stöder också beräkning av resultaten av formler som läggs till vid runtime.

Lägga till formler och beräkna resultat

Aspose.Cells stöder de flesta av formlerna eller funktionerna som är en del av Microsoft Excel. De kan användas via API eller genom att använda designerkalkylblad. Aspose.Cells stöder en stor mängd matematiska, sträng-, booleska, datum-/tid-, statistiska, sök- och referensformler.

Använd Cell.SetFormula-metoden för att lägga till en formel i en cell. När du applicerar en formel på en cell ska du alltid börja strängen med ett likhetstecken (=) precis som när du skapar en formel i Microsoft Excel. Använd ett kommatecken (,) för att avgränsa funktionsparametrarna.

För att beräkna resultaten av formler, anropa Workbook.CalculateFormula() -metoden som bearbetar alla formler som är inbäddade i en Excel-fil. Var god se följande exempelkod som lägger till formeln och beräknar dess resultat. Var god kontrollera den utdata excel-fil som genererats med denna kod.

Exempelkod

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

Beräkna formler endast en gång

När Workbook.CalculateFormula() kallas för att beräkna värdena för formler i en arbetsboksmall skapar Aspose.Cells en beräkningskedja. Det ökar prestandan när formler beräknas för andra eller tredje gången.

Men om mallen innehåller många formler kan den första gången formeln beräknas förbruka mycket CPU-processortid och minne.

Aspose.Cells tillåter dig att stänga av skapandet av en beräkningskedja vilket är användbart när du vill beräkna formler endast en gång.

Var god ring Workbook.GetISettings().SetCreateCalcChain() med falskt parameter. Du kan använda den medföljande Excel-filen för att testa denna kod.

Exempelkod

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