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