Formas de calcular fórmulas
Introducción
Aspose.Cells tiene un motor de cálculo de fórmulas integrado. No solo puede volver a calcular fórmulas importadas de plantillas de diseño, sino que también admite el cálculo de los resultados de fórmulas agregadas en tiempo de ejecución.
Agregar fórmulas y calcular resultados
Aspose.Cells admite la mayoría de las fórmulas o funciones que forman parte de Microsoft Excel. Se pueden usar a través de la API o mediante hojas de cálculo de diseño. Aspose.Cells admite un gran conjunto de fórmulas matemáticas, de cadena, booleanas, de fecha/hora, estadísticas, de búsqueda y referencia.
Utilice el método Cell.SetFormula para agregar una fórmula a una celda. Al aplicar una fórmula a una celda, siempre comience el texto con un signo igual (=) como lo hace al crear una fórmula en Microsoft Excel. Use una coma (,) para delimitar los parámetros de la función.
Para calcular los resultados de las fórmulas, llame al método Workbook.CalculateFormula() que procesa todas las fórmulas incrustadas en un archivo de Excel. Consulte el siguiente código de ejemplo que agrega la fórmula y calcula sus resultados. Consulte el archivo de Excel de salida generado con este código.
Código de Ejemplo
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(); |
Puede usar el método Worksheet.CalculateFormula(String formula) para calcular los resultados de dichas fórmulas sin agregarlas a la hoja de cálculo.
El código a continuación produce la siguiente salida.
Value of A1: 20
Value of A2: 30
Result of Sum(A1:A2): 50
Código de Ejemplo
//For complete examples and data files, please go to https://github.com/aspose-cells/Aspose.Cells-for-C | |
//Create workbook | |
intrusive_ptr<IWorkbook> wb = Factory::CreateIWorkbook(); | |
//Access first worksheet in the workbook | |
intrusive_ptr<IWorksheet> ws = wb->GetIWorksheets()->GetObjectByIndex(0); | |
//Put 20 in cell A1 | |
intrusive_ptr<ICell> cellA1 = ws->GetICells()->GetObjectByIndex(new String("A1")); | |
cellA1->PutValue(20); | |
//Put 30 in cell A2 | |
intrusive_ptr<ICell> cellA2 = ws->GetICells()->GetObjectByIndex(new String("A2")); | |
cellA2->PutValue(30); | |
//Calculate the Sum of A1 and A2 | |
intrusive_ptr<Aspose::Cells::System::Object> results = ws->CalculateFormula(new String("=Sum(A1:A2)")); | |
//Print the output | |
StringPtr str1 = new String("Value of A1: "); | |
Console::WriteLine(str1->StringAppend(cellA1->GetStringValue())); | |
StringPtr str2 = new String("Value of A2: "); | |
Console::WriteLine(str2->StringAppend(cellA2->GetStringValue())); | |
StringPtr str3 = new String("Result of Sum(A1:A2): "); | |
Console::WriteLine(str3->StringAppend(results->ToString())); |
Calcular fórmulas solo una vez
Cuando se llama a Workbook.CalculateFormula() para calcular los valores de las fórmulas en una plantilla de libro de trabajo, Aspose.Cells crea una cadena de cálculo. Aumenta el rendimiento cuando las fórmulas se calculan por segunda o tercera vez.
Sin embargo, si la plantilla contiene muchas fórmulas, el tiempo de cálculo de la fórmula la primera vez puede consumir mucho tiempo de procesamiento de CPU y memoria.
Aspose.Cells te permite desactivar la creación de una cadena de cálculo, lo cual es útil cuando quieres calcular las fórmulas solo una vez.
Por favor llama a Workbook.GetISettings().SetCreateCalcChain() con el parámetro false. Puedes usar el archivo de Excel proporcionado para probar este código.
Código de Ejemplo
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(); |