Beräkna eller ombäkna formler dynamiskt

Formelberäkningsmotorn är inbäddad i Aspose.Cells. Den kan inte bara ombäkna formeln som importerats från designfilen utan stödjer också beräkning av resultaten av formler som har lagts till vid runtime.

Lägga till formler och beräkna resultat

Aspose.Cells stödjer de flesta formler eller funktioner som är en del av Microsoft Excel. Utvecklare kan använda dessa formler med hjälp av API eller Designer Spreadsheets. Aspose.Excel stödjer en stor uppsättning matematiska, sträng-, booleska, datum/tid-, statistiska, databas-, sök- och referens formler.

Använd Cell-klassens Formel-egenskap för att lägga till en formel i en cell. När du tillämpar en formel på en cell, börjar du alltid 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 funktionsparametrar.

För att beräkna resultaten av formler, anropa Excel-klassens CalculateFormula-metod som bearbetar alla formler som är inbäddade i en Excel-fil. Läs länk: list of functions supported by the CalculateFormula method.

 //Instantiating a Workbook object

Workbook workbook = new Workbook();

//Adding a new worksheet to the Excel object

int sheetIndex = workbook.Worksheets.Add();

//Obtaining the reference of the newly added worksheet by passing its sheet index

Worksheet worksheet = workbook.Worksheets[sheetIndex];

//Adding a value to "A1" cell

worksheet.Cells["A1"].PutValue(1);

//Adding a value to "A2" cell

worksheet.Cells["A2"].PutValue(2);

//Adding a value to "A3" cell

worksheet.Cells["A3"].PutValue(3);

//Adding a SUM formula to "A4" cell

worksheet.Cells["A4"].Formula = "=SUM(A1:A3)";

//Calculating the results of formulas

workbook.CalculateFormula();

//Get the calculated value of the cell

string value = worksheet.Cells["A4"].Value.ToString();

//Saving the Excel file

workbook.Save("Adding Formula.xls");

Beräkna formler endast en gång

När användaren anropar Workbook.CalculateFormula() för att beräkna värdena för formlerna i arbetsboksmallen skapar Aspose.Cells en beräkningskedja. Det ökar prestanda när formler beräknas för andra eller tredje gången osv. Men om användarmallen innehåller många olika formler kan första gången för formelberäkningen kräva en hel del CPU-processortid och minne.

Aspose.Cells låter dig stänga av skapandet av beräkningskedja, vilket är användbart i situationer när du bara vill beräkna formler i din fil en gång.

Om du försöker förbättra prestandan för formelberäkningar med Aspose.Cells och inte vill skapa en formelberäkningskedja, vänligen ställ in FormulaSettings.EnableCalculationChain som false. Som standard är det inställt som true.

 string FilePath = @"..\..\..\Sample Files\";

string FileName = FilePath + "Adding Formula.xlsx";

//Load the template workbook

Workbook workbook = new Workbook(FileName);

//Print the time before formula calculation

Console.WriteLine(DateTime.Now);

//Set the CreateCalcChain as false

workbook.Settings.FormulaSettings.EnableCalculationChain = false;

//Calculate the workbook formulas

workbook.CalculateFormula();

//Print the time after formula calculation

Console.WriteLine(DateTime.Now);

workbook.Save(FileName);

Direkt beräkning av formel

Formelberäkningsmotorn är inbäddad i Aspose.Cells. Förutom att ombäkna formeln som importerats från designfilen, stödjer även Aspose.Cells att beräkna resultaten av formler direkt. Ibland behöver du beräkna resultaten av formler direkt utan att faktiskt lägga till dem på en kalkylblad. Värdena på cellerna som används i formeln finns redan i ett kalkylblad och allt du behöver är att hitta resultatet av dessa värden baserat på någon Ms-Excel-formel utan att lägga till formeln på ett kalkylblad.

Du kan använda Aspose.Cells Formula Calculation Engine API, dvs worksheet.Calculate(string formula), för att beräkna resultaten av sådana formler utan att faktiskt lägga till dem på kalkylbladet.

 //Create a workbook

Workbook workbook = new Workbook();

//Access first worksheet

Worksheet worksheet = workbook.Worksheets[0];

//Put 20 in cell A1

Cell cellA1 = worksheet.Cells["A1"];

cellA1.PutValue(20);

//Put 30 in cell A2

Cell cellA2 = worksheet.Cells["A2"];

cellA2.PutValue(30);

//Calculate the Sum of A1 and A2

var results = worksheet.CalculateFormula("=Sum(A1:A2)");

Cell cellA3 = worksheet.Cells["A3"];

cellA3.PutValue(results);

//Print the output

Debug.WriteLine("Value of A1: " + cellA1.StringValue);

Debug.WriteLine("Value of A2: " + cellA2.StringValue);

Debug.WriteLine("Result of Sum(A1:A2): " + results.ToString());

workbook.Save("Calulate Any Formulae.xls");

Ladda ned provkoden