Динамически вычислить или пересчитать формулы

Формула вычисления встроена в Aspose.Cells. Она может не только пересчитать формулу, импортированную из файла дизайнера, но и поддерживает вычисление результатов формул, добавленных во время выполнения.

Добавление формул и вычисление результатов

Aspose.Cells поддерживает большинство формул или функций, которые являются частью Microsoft Excel. Разработчики могут использовать эти формулы с помощью API или дизайнерских электронных таблиц. Aspose.Excel поддерживает огромный набор математических, строковых, булевых, даты/времени, статистических, баз данных, поиска и ссылочных формул.

Используйте свойство Formula класса Cell, чтобы добавить формулу в ячейку. При применении формулы к ячейке всегда начинайте строку с знака равенства (=), как это делаете при создании формулы в Microsoft Excel. Используйте запятую (,) для разделения параметров функции.

Для вычисления результатов формул вызовите метод CalculateFormula класса Excel, который обрабатывает все формулы, встроенные в файл Excel. Читайте url: список функций, поддерживаемых методом CalculateFormula.

 //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");

Вычисление формул один раз

Когда пользователь вызывает Workbook.CalculateFormula(), чтобы вычислить значения формул внутри шаблона книги Excel, Aspose.Cells создает цепочку расчетов. Это повышает производительность при расчете формул во второй или третий раз и т.д. Однако, если пользовательский шаблон содержит много разнообразных формул, то при первом вычислении формул может потребляться много времени процессора и памяти.

Aspose.Cells позволяет отключить создание цепочки расчетов, что полезно в ситуациях, когда вы хотите вычислить формулы файла только один раз.

Если вы хотите повысить производительность расчета формул с помощью Aspose.Cells и не хотите создавать цепочку расчетов, установите FormulaSettings.EnableCalculationChain в false. По умолчанию оно установлено как 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);

Прямое вычисление формулы

Движок вычисления формул встроен в Aspose.Cells. Кроме того, помимо повторного вычисления формул, импортированных из файла дизайнера, Aspose.Cells также поддерживает вычисление результатов формул непосредственно. Иногда вам нужно вычислить результаты формул непосредственно, не добавляя их фактически в рабочий лист. Значения ячеек, использованных в формуле, уже существуют в рабочем листе, и все, что вам нужно, это найти результат этих значений на основе какой-то формулы Ms-Excel без добавления формулы в рабочий лист.

Вы можете использовать API движка вычисления формул Aspose.Cells, т. е. worksheet.Calculate(string formula), чтобы вычислить результаты таких формул, не добавляя их фактически в рабочий лист.

 //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");

Загрузить образец кода