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

Escenarios de uso posibles

Normalmente, recomendamos a los usuarios llamar al método workbook.calculate_formula() una vez y luego obtener los valores calculados de las celdas individuales. Cuando se trabaja con cálculos en una sola celda, puede usar la propiedad calculation_options.recursive para reducir significativamente el tiempo de cálculo. Configurar esta propiedad en False evita recalcular las celdas dependientes en llamadas posteriores.

Optimización del rendimiento del cálculo de celdas

El siguiente ejemplo demuestra el uso de la propiedad recursiva. Use el archivo de ejemplo de Excel proporcionado para probar la diferencia de rendimiento. El código muestra cómo establecer recursive=False reduce el tiempo de cálculo al evitar recalcular de manera redundante las celdas dependientes.

# 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
test_calc_time_recursive(True)

# Test calculation time after setting recursive false
test_calc_time_recursive(False)
import os
import time
from aspose.cells import Workbook, CalculationOptions

def test_calc_time_recursive(rec):
    """
    Tests calculation time with recursive option and prints elapsed seconds
    """
    # The path to the documents directory
    current_dir = os.path.dirname(os.path.abspath(__file__))
    data_dir = os.path.join(current_dir, "data")

    # Load sample workbook
    wb = Workbook(os.path.join(data_dir, "sample.xlsx"))

    # Access first worksheet
    ws = wb.worksheets[0]

    # Set calculation options
    opts = CalculationOptions()
    opts.recursive = rec

    # Start timing
    start_time = time.perf_counter()

    # Calculate cell A1 one million times
    for _ in range(1000000):
        ws.cells.get("A1").calculate(opts)

    # Calculate elapsed time
    elapsed_time = int(time.perf_counter() - start_time)

    # Print results
    print(f"Recursive {rec}: {elapsed_time} seconds")

Resultados de la prueba de rendimiento

La salida típica al ejecutar el código optimizado con el archivo de muestra muestra una reducción significativa de tiempo:

Recursive True: 96 seconds
Recursive False: 42 seconds