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

Escenarios de uso posibles

Normalmente, recomendamos a los usuarios que llamen al método Workbook.CalculateFormula() una vez y luego obtengan los valores calculados de las celdas individuales. Pero a veces, los usuarios no quieren calcular toda la hoja de cálculo. Solo desean calcular una sola celda. Aspose.Cells proporciona la propiedad CalculationOptions.Recursive que puedes establecer en false y disminuirá significativamente el tiempo de cálculo de una celda individual. Cuando se establece en true, todos los dependientes de las celdas se vuelven a recalcular en cada llamada. Pero cuando se establece en false, las celdas dependientes solo se calculan una vez y no se vuelven a calcular en llamadas subsecuentes.

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

El siguiente código de muestra ilustra el uso de la propiedad CalculationOptions.Recursive. Por favor, ejecuta este código con el archivo de Excel de muestra dado y verifica su salida en la consola. Descubrirás que establecer la propiedad recursiva en false ha disminuido significativamente el tiempo de cálculo. Por favor, también lee los comentarios para una mejor comprensión de esta propiedad.

// For complete examples and data files, please go to https://github.com/aspose-cells/Aspose.Cells-for-Java
public static void main(String[] args) throws Exception {
// Test calculation time after setting recursive true
TestCalcTimeRecursive(true);
// Test calculation time after setting recursive false
TestCalcTimeRecursive(false);
}
// --------------------------------------------------
static void TestCalcTimeRecursive(boolean rec) throws Exception {
String dataDir = Utils.getDataDir(DecreaseCalculationTime.class);
// Load your sample workbook
Workbook wb = new Workbook(dataDir + "sample.xlsx");
// Access first worksheet
Worksheet ws = wb.getWorksheets().get(0);
// Set the calculation option, set recursive true or false as per parameter
CalculationOptions opts = new CalculationOptions();
opts.setRecursive(rec);
// Start calculating time in nanoseconds
long startTime = System.nanoTime();
// Calculate cell A1 one million times
for (int i = 0; i < 1000000; i++) {
ws.getCells().get("A1").calculate(opts);
}
// Calculate elapsed time in seconds
long second = 1000000000;
long estimatedTime = System.nanoTime() - startTime;
estimatedTime = estimatedTime / second;
// Print the elapsed time in seconds
System.out.println("Recursive " + rec + ": " + estimatedTime + " seconds");
}

Salida de la consola

Esta es la salida de consola del código de muestra anterior cuando se ejecuta con el archivo de Excel de muestra en nuestra máquina. Por favor, ten en cuenta que tu salida puede ser diferente pero el tiempo transcurrido después de establecer la propiedad recursiva en false siempre será menor que si se estableciera en true.

 Recursive true: 51 seconds

Recursive false: 16 seconds