تقليل وقت حساب طريقة Cell.Calculate باستخدام Python.NET
سيناريوهات الاستخدام المحتملة
عادةً، نوصي المستخدمين باستدعاء طريقة workbook.calculate_formula() مرة واحدة ثم الحصول على القيم المحسوبة للخلايا الفردية. عند العمل مع حساب خلايا فردية، يمكنك استخدام الخاصية calculation_options.recursive لتقليل زمن الحساب بشكل كبير. ضبط هذه الخاصية إلى False
يمنع إعادة حساب الخلايا المعتمدة في الاستدعاءات التالية.
تحسين أداء حساب الخلايا
يعرض المثال التالي استخدام الخاصية التكرارية. يمكنك استخدام ملف إكسل النموذجي المقدم للاختبار لمقارنة الأداء. يوضح الكود كيف أن ضبط 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