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 quieren calcular todo el libro de trabajo. Solo quieren calcular una sola celda. Aspose.Cells proporciona la propiedad CalculationOptions.Recursive la cual puedes establecer en false y disminuirá significativamente el tiempo de cálculo de la celda individual. Porque 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 se establece en false, entonces las celdas dependientes se calculan una sola vez y no se vuelven a calcular en llamadas posteriores.

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