Reducir el tiempo de cálculo del método Cell.Calculate

Escenarios de uso posibles

Normalmente, recomendamos a los usuarios llamar al método Workbook.CalculateFormula() una vez y luego obtener los valores calculados de las celdas individuales. Pero a veces, los usuarios no desean calcular todo el libro. Solo desean calcular una celda. Aspose.Cells proporciona la propiedad CalculationOptions.Recursive, que se puede establecer en false y disminuirá significativamente el tiempo de cálculo de la celda individual. Cuando la propiedad recursiva se establece en true, entonces todos los dependientes de las celdas se recalculan en cada llamada. Pero cuando la propiedad recursiva es false, las celdas dependientes se calculan solo una vez y no se vuelven a calcular en llamadas subsiguientes.

Reducir el tiempo de cálculo del método Cell.Calculate()

El siguiente código de ejemplo ilustra el uso de la propiedad CalculationOptions.Recursive. Por favor, ejecute este código con el archivo de Excel de ejemplo proporcionado y verifique su salida en la consola. Descubrirá que configurar la propiedad recursiva en false ha reducido significativamente el tiempo de cálculo. También lea los comentarios para comprender mejor esta propiedad.

// For complete examples and data files, please go to https://github.com/aspose-cells/Aspose.Cells-for-.NET
// Test calculation time after setting recursive true
TestCalcTimeRecursive(true);
// Test calculation time after setting recursive false
TestCalcTimeRecursive(false);
// For complete examples and data files, please go to https://github.com/aspose-cells/Aspose.Cells-for-.NET
static void TestCalcTimeRecursive(bool rec)
{
// The path to the documents directory.
string dataDir = RunExamples.GetDataDir(System.Reflection.MethodBase.GetCurrentMethod().DeclaringType);
// Load your sample workbook
Workbook wb = new Workbook(dataDir + "sample.xlsx");
// Access first worksheet
Worksheet ws = wb.Worksheets[0];
// Set the calculation option, set recursive true or false as per parameter
CalculationOptions opts = new CalculationOptions();
opts.Recursive = rec;
// Start stop watch
Stopwatch sw = new Stopwatch();
sw.Start();
// Calculate cell A1 one million times
for (int i = 0; i < 1000000; i++)
{
ws.Cells["A1"].Calculate(opts);
}
// Stop the watch
sw.Stop();
// Calculate elapsed time in seconds
long second = 1000;
long estimatedTime = sw.ElapsedMilliseconds / second;
// Print the elapsed time in seconds
Console.WriteLine("Recursive " + rec + ": " + estimatedTime + " seconds");
}

Salida de la consola

Esta es la salida en la consola del código de ejemplo anterior cuando se ejecuta con el archivo de Excel de ejemplo proporcionado en nuestra máquina. Tenga en cuenta que su salida puede ser diferente, pero el tiempo transcurrido después de establecer la propiedad recursiva en false siempre será menor que al establecerla en true.

Recursive True: 96 seconds

Recursive False: 42 seconds