Способы вычисления формул

Введение

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

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

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

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

Для вычисления результатов формул вызовите метод Workbook.CalculateFormula(), который обрабатывает все формулы, встроенные в файл Excel. Пожалуйста, ознакомьтесь с примером кода ниже, добавляющим формулу и вычисляющим ее результаты. Пожалуйста, проверьте выходной файл Excel, созданный с помощью этого кода.

Пример кода

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

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

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

Однако, если шаблон содержит много формул, первый раз вычисления формулы может занять много времени процессора и памяти.

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

Пожалуйста, вызовите Workbook.GetISettings().SetCreateCalcChain() с параметром false. Вы можете использовать предоставленный файл Excel для тестирования этого кода.

Пример кода

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