تسريع وحدات ماكرو Calc عن طريق قراءة وكتابة البيانات على دفعات

أفضل طريقة موثوقة لتحسين سرعة ماكرو Calc البطيء هي استبدال عمليات قراءة وكتابة الخلايا المتكررة بقراءة نطاق واحد، وحلقة تكرارية في الذاكرة، وكتابة نطاق واحد. هذا يقلل من عدد الاستدعاءات بين Basic وCalc؛ ولكنه لا يضمن زيادة ثابتة في السرعة، لأن الصيغ والتنسيق وحجم الملف ومنطق الماكرو قد تؤثر أيضًا على وقت التشغيل. يوضح المثال أدناه كيفية تغيير عمود الحالة وكيفية قياس كل من السرعة والصحة. تم التحقق من تفاصيل واجهة برمجة التطبيقات (API) بالرجوع إلى وثائق LibreOffice 26.8 بتاريخ 9 أكتوبر 2026.

ما الذي ينبغي تحسينه، وكيف ستقيس ذلك؟

شغّل الماكرو الحالي على نسخة من المصنف وسجّل الوقت المستغرق. استخدم نسخة جديدة بنفس بيانات البداية للماكرو القديم والمعدّل، أو استعد البيانات المدخلة بين التشغيلين؛ وإلا فقد يُنجز التشغيل الثاني عملاً أقل. حافظ على عدد الصفوف وإعدادات الحساب وشروط الإخراج كما هي. كرّر كل تشغيل وقارن الوقت المعتاد بدلاً من الاعتماد على تشغيل واحد سريع بشكل غير معتاد. تأكد من أن النتيجة تتطابق مع القاعدة المتوقعة. الماكرو الذي ينتهي أسرع ولكنه يُغيّر الصفوف الخاطئة ليس تحسيناً.

تُبلغ دالة LibreOffice Basic Timerعن الثواني منذ منتصف الليل؛ قم بتعيينها Longلمتغيرات للحصول على الثواني بالأرقام. بالنسبة لتشغيل قصير، سجّل قيمة البداية وقيمة النهاية واطرحهما. إذا كانت قيمة النهاية أقل، فهذا يعني أن التشغيل قد تجاوز منتصف الليل، لذا أضف 86400 ثانية إلى الفرق. يُبلغ المؤقت عن الثواني الكاملة؛ استخدم ScriptForgeخدمة المؤقت للحصول على دقة بالمللي ثانية. راجع وثائق مؤقت LibreOffice Basic ووثائق خدمة مؤقت ScriptForge . تجنب فتح المصنفات وحفظها وفحصها يدويًا خارج الفترة الزمنية المقاسة إلا إذا كانت جزءًا من المهمة الأساسية.

ورقة عمل حسابية تحتوي على أعمدة المعرف والمنطقة والحالة ونطاق بيانات محدد
ابدأ بنفس نطاق البيانات المتجاورة وشروط دفتر العمل لكل عملية تشغيل للتوقيت.

لماذا يؤدي استخدام وحدات الماكرو الكبيرة في برنامج Calc إلى إبطاء الأداء؟

تتطلب حلقة تكرارية تستدعي getCellByPosition()أو تقرأ وتكتب خصائص خلايا فردية بشكل متكرر من برنامج Calc عبور واجهة Basic-to-Calc لكل عملية. مع وجود العديد من الصفوف والأعمدة، قد تتراكم هذه الاستدعاءات حتى عندما يكون التحويل نفسه بسيطًا. بينما لا تزال الحلقة التكرارية على مصفوفة في الذاكرة تزور كل صف، إلا أنها تتجنب استدعاء واجهة برمجة تطبيقات الخلية بشكل منفصل لكل قيمة.

ابدأ بإزالة العمليات التي لا تؤثر على النتيجة: تجنب تحديد أو تنشيط الخلايا داخل الحلقة، ولا تقم بإعادة حساب أو تنسيق خلية بشكل متكرر عندما تكفي عملية نطاق واحدة أخيرة، ولا تعالج الأعمدة بأكملها إذا كنت تحتاج فقط إلى كتلة بيانات محدودة. تساعد هذه التغييرات في تحديد نقطة الاختناق الفعلية قبل إضافة المزيد من عناصر التحكم.

كيف تتم معالجة نطاق البيانات كمصفوفة؟

استخدم نطاقًا مستطيلًا يحتوي فقط على القيم التي ينوي الماكرو تغييرها. يفترض المثال وجود ورقة عمل باسم Data، وصف رأس في الصف 1، وقيم الحالة في العمود C. غيّر اسم ورقة العمل والنطاق ليتوافقا مع مصنفك. تُرجع واجهة برمجة التطبيقات getDataArray()النطاق كصفوف تحتوي على القيم؛ setDataArray()وتكتب مصفوفة بنفس الحجم في ذلك النطاق.

محرر LibreOffice Basic يقرأ نطاق Calc محددًا إلى aData باستخدام getDataArray
اقرأ النطاق المستطيل المطلوب مرة واحدة قبل حلقة الذاكرة.
Sub UpdateStatuses
    Dim oSheet As Object
    Dim oRange As Object
    Dim aData As Variant
    Dim i As Long

    oSheet = ThisComponent.Sheets.getByName("Data")
    oRange = oSheet.getCellRangeByName("A2:C10001")
    aData = oRange.getDataArray()

    For i = LBound(aData) To UBound(aData)
        If aData(i)(2) = "pending" Then
            aData(i)(2) = "review"
        End If
    Next i

    oRange.setDataArray(aData)
End Sub

مصفوفة الصفوف تبدأ من الصفر: أي aData(i)(2)أنها تشير إلى العمود الثالث في كل صف. هنا، هو العمود C لأن النطاق المحدد يبدأ من A. يمثل التسلسل الخارجي للمصفوفة الصفوف، بينما يمثل كل تسلسل داخلي الأعمدة. setDataArray()يجب أن يكون للنطاق المُمرر نفس أبعاد المصفوفة؛ أي اختلاف سيؤدي إلى ظهور خطأ. راجع مرجع واجهة برمجة تطبيقات XCellRangeData في LibreOffice ووثائق مصفوفات LibreOffice ScriptForge .

ماكرو LibreOffice Basic يُغيّر القيم المُعلّقة للمراجعة في مصفوفة موجودة في الذاكرة ويكتب المصفوفة مرة أخرى
قم بتطبيق القاعدة في الذاكرة، ثم اكتب المصفوفة المكتملة إلى Calc في استدعاء واحد.

تجنب استخدام خلايا الصيغة في تحديث القيم فقط

getDataArray()تُعيد هذه الدالة قيم الخلايا كأرقام أو سلاسل نصية، وليس نص الصيغة الأصلي. إذا قرأت نطاقًا يحتوي على صيغ، ثم كتبت مصفوفة القيم مرة أخرى setDataArray()، فسيتم استبدال تلك الصيغ بنتائجها الحالية. اقتصر استخدام دالة `value-array` على خلايا الإدخال/الإخراج التي يجب أن تحتوي على قيم. عندما يتطلب الماكرو الحفاظ على الصيغ أو تعديلها، استخدم دالتي `formula-array` getFormulaArray()و` formula-array` setFormulaArray()، أو اعمل فقط على النطاق الذي لا يحتوي على صيغ. يوضح مرجع واجهة برمجة تطبيقات XCellRangeFormula هذه الواجهة المنفصلة.

متى يجب عليك تغيير إعدادات الحساب أو العرض؟

اختبر هذه الخيارات فقط بعد قياس إصدار المصفوفة. إذا كانت إعادة حساب الصيغة تشكل جزءًا كبيرًا من وقت التشغيل، يمكنك الاستعلام isAutomaticCalculationEnabled()، وتعطيل الحساب التلقائي مؤقتًا باستخدام enableAutomaticCalculation(False)، ثم استعادة الإعداد الأصلي وإعادة حساب الخلايا المتغيرة عند الحاجة. ضع الاستعادة في مسار التنظيف حتى لا يترك الخطأ المصنف في وضع الحساب اليدوي. لا تعطل الحساب إذا كان الماكرو يحتاج إلى نتائج صيغة جديدة بين الخطوات. تُوثّق LibreOffice calculate()إعادة حساب الخلايا المتغيرة؛ calculateAll()إذ تُجبر على إعادة حساب كاملة وقد تكون مكلفة. راجع مرجع واجهة برمجة تطبيقات XCalculatable .

lockControllers()يمكن إيقاف بعض الإشعارات المستخدمة لتحديثات العرض مؤقتًا أثناء قيام ماكرو بتغيير العديد من الخلايا. قم بربط كل قفل بـ unlockControllers()، بما في ذلك عند خروج الماكرو من خلال معالج الأخطاء. هذا يقلل من عملية تحديث العرض؛ فهو لا يوقف حساب الصيغ أو يحول منطق كل خلية إلى عملية جماعية. استخدمه لمعالجة عنق الزجاجة في تحديث الشاشة بشكل مدروس، وليس كبديل لمصفوفات النطاق. راجع مرجع واجهة برمجة تطبيقات XModel .

كيف تتحقق من التغيير وتعرف متى يجب تغيير الأساليب؟

شغّل الماكرو المُعدّل على نسخة من المصنف وسجّل وقت تشغيله في ظل نفس ظروف النسخة الأساسية. قارن الصفوف المتأثرة وغير المتأثرة، والصيغ، والمجاميع الرئيسية. احفظ النسخة وأغلقها ثم أعد فتحها إذا كانت عملية الإنتاج تتضمن الحفظ؛ فهذا قد يكشف عن مشكلات لا تظهر عند الفحص البصري السريع. من المفترض أن يظهر تحسن ملحوظ مع تكرار التشغيل، مع استمرار اجتياز فحوصات المخرجات بنجاح.

ورقة عمل حسابية تعرض قيم الحالة المحدثة وجدول مقارنة التوقيت الفارغ
قم بتأكيد القيم المحولة وسجل التوقيتات المقاسة دون افتراض حدوث تسارع مسبقًا.

إذا كان الماكرو لا يزال يقضي معظم وقته في معالجة الصيغ المعقدة، أو التنسيق، أو عمليات الإدخال والإخراج للملفات، أو الفرز، فقم بتحليل أداء هذه المرحلة بشكل منفصل؛ إذ أن مصفوفات النطاقات تقلل فقط من الوصول المتكرر إلى الخلايا. بالنسبة للجداول الكبيرة جدًا، قد تستهلك مصفوفة كاملة في الذاكرة كمية كبيرة من الذاكرة. عالج بضعة أعمدة في كل مرة، أو قسّم الصفوف إلى كتل مُقاسة إذا ازداد الضغط على الذاكرة، مع التأكد من أن كل كتلة تبدأ وتنتهي على الصفوف المقصودة. إذا كانت البيانات موجودة بالفعل في قاعدة بيانات، وكانت المهمة هي تصفية السجلات أو تجميعها أو تحديثها، فقد يكون نقل هذا العمل إلى استعلام قاعدة بيانات أنسب من تحميل كل سجل في برنامج Calc.

اترك تعليقاً

صغّر حجم ملفات LibreOffice Impress دون تشويش الصور

صغّر حجم ملفات LibreOffice Impress دون تشويش الصور

قلل من حجم ملفات عروض LibreOffice التقديمية الكبيرة عن طريق ضغط الصور المضمنة، واختيار إعدادات صور معقولة، والتحقق من جودة الشرائح قبل مشاركتها.

منع قصّ الصور المطبوعة ذات الأحجام المخصصة في LibreOffice

منع قصّ الصور المطبوعة ذات الأحجام المخصصة في LibreOffice

قم بمطابقة أبعاد صفحة LibreOffice مع طابعتك، وتحقق من الهوامش القابلة للطباعة، وقم بتصحيح التحجيم قبل طباعة مستند ذي حجم مخصص.

تسريع وحدات ماكرو Calc عن طريق قراءة وكتابة البيانات على دفعات

تسريع وحدات ماكرو Calc عن طريق قراءة وكتابة البيانات على دفعات

استبدل الوصول المتكرر إلى الخلايا بعمليات قراءة وكتابة النطاقات المجمعة، ثم قم بقياس النتائج وحماية الصيغ في مصنفات Calc الكبيرة.

تنظيم دفتر LibreOffice باستخدام المستندات الرئيسية المرتبطة

تنظيم دفتر LibreOffice باستخدام المستندات الرئيسية المرتبطة

قسّم المخطوطة الطويلة إلى فصول، وقم بتجميعها في برنامج Writer، وحافظ على اتساق الأنماط والمحتويات وعمليات التحقق من التصدير.

قم بتوصيل LibreOffice Base بـ PostgreSQL باستخدام المعالج المدمج

قم بتوصيل LibreOffice Base بـ PostgreSQL باستخدام المعالج المدمج

استخدم خيار PostgreSQL المباشر في Base لإدخال تفاصيل الخادم الخاص بك، وتسجيل الدخول، وحفظ ملف اتصال ODB، واستكشاف أخطاء الوصول الشائعة وإصلاحها.

توفير خطوط مخصصة لـ LibreOffice Flatpak

توفير خطوط مخصصة لـ LibreOffice Flatpak

قم بتثبيت خط في مجلد الخطوط الخاص بمستخدم Linux الخاص بك، وأعد تشغيل LibreOffice Flatpak، وتأكد من ظهوره في Writer دون إضعاف الحماية التي يوفرها التطبيق.

أوقفوا أعطال LibreOffice في سونوما: اعملوا محلياً أولاً

أوقفوا أعطال LibreOffice في سونوما: اعملوا محلياً أولاً

احمِ عملك واعزل أعطال حفظ محرك الأقراص الشبكي في LibreOffice على نظام macOS Sonoma باستخدام سير عمل محلي أولاً، وفحوصات الأذونات، والاختبارات المستهدفة.

حافظ على معرّفات CSV سليمة في Calc عن طريق استيرادها كنص

حافظ على معرّفات CSV سليمة في Calc عن طريق استيرادها كنص

حافظ على الأصفار البادئة في برنامج Calc عن طريق تعيين أعمدة المعرف إلى نص أثناء استيراد ملف CSV، والتحقق من المعاينة، والتحقق من البيانات المحفوظة.

حل آمن لمشكلة قفل مستند LibreOffice بواسطة مستخدم غير معروف

حل آمن لمشكلة قفل مستند LibreOffice بواسطة مستخدم غير معروف

ابحث عن سبب قفل مستند LibreOffice، وقم بمسح ملف القفل القديم بأمان، وتأكد من أنه يمكنك التحرير والحفظ دون فقدان التغييرات.

تسريع برنامج الكتابة عن طريق إخفاء وضغط صور المستندات

تسريع برنامج الكتابة عن طريق إخفاء وضغط صور المستندات

اجعل تحرير ملفات Writer التي تحتوي على صور كثيرة أسهل: اختبر إعداد عرض قابل للعكس، واضغط الصور كبيرة الحجم في نسخة، وتحقق من التخطيط المحفوظ.