Diminuer le temps de calcul de la méthode Cell.Calculate avec Python.NET

Scénarios d’utilisation possibles

Normalement, nous recommandons aux utilisateurs d’appeler la méthode workbook.calculate_formula() une fois, puis d’obtenir les valeurs calculées des cellules individuelles. Lorsqu’on travaille avec des calculs de cellules uniques, vous pouvez utiliser la propriété calculation_options.recursive pour réduire considérablement le temps de calcul. La définir à False empêche de recalculer les cellules dépendantes lors des appels suivants.

** Optimisation des performances de calcul des cellules**

L’exemple suivant démontre l’utilisation de la propriété récursive. Utilisez le fichier Excel d’exemple fourni pour tester la différence de performance. Le code montre comment le fait de définir recursive=False réduit le temps de calcul en évitant de recalculer les cellules dépendantes redondantes.

# 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")

** Résultats du benchmark de performance**

La sortie typique lors de l’exécution du code optimisé avec le fichier d’exemple montre une réduction notable du temps :

Recursive True: 96 seconds
Recursive False: 42 seconds