Ускорьте время расчетов метода Cell.Calculate с помощью Python.NET

Возможные сценарии использования

Обычно рекомендуется вызывать метод workbook.calculate_formula() один раз и затем получать вычисленные значения отдельных ячеек. При работе с расчетами для одной ячейки можно использовать свойство calculation_options.recursive, чтобы значительно сократить время вычислений. Установка этого свойства в значение False предотвращает перерасчет зависимых ячеек при последующих вызовах.

Оптимизация производительности расчетов ячеек

Следующий пример демонстрирует использование рекурсивного свойства. Используйте предоставленный пример файла Excel для тестирования разницы в производительности. Код показывает, как установка recursive=False уменьшает время расчетов, избегая избыточных перерасчетов зависимых ячеек.

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

Результаты тестирования производительности

Типичный результат при запуске оптимизированного кода с использованием примерного файла показывает значительное сокращение времени:

Recursive True: 96 seconds
Recursive False: 42 seconds