Способы вычисления формул
Введение
У 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(); |