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