استخدام واجهة LightCells API
بنية معمارية مدعومة بالأحداث
توفر Aspose.Cells واجهة LightCells API مصممة بشكل رئيسي للتلاعب ببيانات الخلية واحدة تلو الأخرى دون بناء نموذج بيانات كاملاً (باستخدام مجموعة الخلية إلخ) في الذاكرة. تعمل في وضع محفز بالأحداث.
لحفظ دفاتر العمل، يتم تقديم محتوى الخلية خلية بخلية عند الحفظ، ويقوم المكون بحفظه في ملف الإخراج مباشرةً.
عند قراءة ملفات القالب، يُحلل المكون كل خلية ويقدم قيمها واحدة تلو الأخرى.
في كل من الإجراءين، يتم معالجة كائن Cell ومن ثم التخلّص منه، ولا يحمل كائن Workbook المجموعة. وبالتالي، يتم توفير الذاكرة عند استيراد وتصدير ملف Microsoft Excel الذي يحتوي على مجموعة بيانات كبيرة والتي ستستخدم وحدة كبيرة من الذاكرة وإلا.
على الرغم من أن واجهة LightCells API تعالج الخلايا بنفس الطريقة لملفات XLSX وXLS (حيث لا تقوم فعليًا بتحميل كل الخلايا في الذاكرة ولكن تعالج خلية ومن ثم تتخلص منها)، إلا أنها تحفظ الذاكرة بشكل أكثر فعالية لملفات XLSX من ملفات XLS بسبب النماذج والهياكل المختلفة للصيغتين.
ومع ذلك، بالنسبة لملفات XLS، يمكن للمطورين تحديد موقع مؤقت لحفظ البيانات المؤقتة التي تُولد أثناء عملية الحفظ، لتحفيظ المزيد من الذاكرة. بشكل شائع، يمكن لاستخدام واجهة LightCells API لحفظ ملف XLSX توفير 50% أو أكثر من الذاكرة مقارنة بالطريقة الشائعة، حفظ ملف XLS قد يوفر حوالي 20-40% من الذاكرة.
كتابة ملفات إكسيل الكبيرة
يوفر Aspose.Cells واجهة LightCellsDataProvider التي يجب تنفيذها في برنامجك. تُمثل الواجهة موفّر بيانات لحفظ ملفات جداول بيانات ضخمة في وضع خفيف الوزن.
عند حفظ دفتر عمل بهذا الوضع، يتم فحص startSheet(int) عند حفظ كل ورقة عمل في الدفتر. بالنسبة إلى ورقة عمل واحدة، إذا كانت startSheet(int) صحيحة، فإن جميع البيانات والخصائص للصفوف والخلايا لهذه الورقة التي ستُحفظ يتم توفيرها من هذا التنفيذ. في المقام الأول، يتم استدعاء nextRow() للحصول على مؤشر الصف التالي الذي سيتم حفظه. إذا تم إرجاع مؤشر صف صحيح (يجب أن يكون مؤشر الصف مرتبًا ترتيبًا تصاعديًا للصفوف المراد حفظها)، فإن كائن Row الذي يُمثّل هذا الصف يتم توفيره للتنفيذ لتعيين خصائصه بواسطة startRow(Row).
بالنسبة إلى صف واحد، يتم فحص nextCell() أولاً. إذا تم إرجاع فهرس العمود صحيح (يجب أن يكون فهرس العمود مرتبًا ترتيبًا تصاعديًا لجميع الخلايا في صف واحد تم حفظه)، فإن كائن Cell الذي يُمثّل هذه الخلية يتم توفيره لتعيين البيانات والخصائص بواسطة startCell(Cell). بعد تعيين بيانات هذه الخلية، يتم حفظ هذه الخلية مباشرةً إلى ملف الجدولة الناتج وسيتم فحص الخلية التالية ومعالجتها.
المثال التالي يوضح كيفية عمل واجهة برمجة التطبيقات LightCells.
البرنامج التالي يقوم بإنشاء ملف كبير يحتوي على 100،000 سجل في ورقة عمل، مملوءة بالبيانات. لقد أضفنا بعض الروابط التشعبية، وقيم السلاسل، والقيم الرقمية وأيضًا الصيغ إلى خلايا معينة في ورقة العمل. علاوة على ذلك، لقد قمنا بتنسيق نطاق من الخلايا أيضًا.
قراءة ملفات Excel الكبيرة
توفر Aspose.Cells واجهة LightCellsDataHandler التي يجب تنفيذها في برنامجك. تمثل الواجهة مزود البيانات لقراءة ملفات جداول بيانات كبيرة بوضع خفيف.
عند قراءة دفتر العمل في هذا الوضع، يتم التحقق من startSheet() عند قراءة كل ورقة في دفتر العمل. بالنسبة للورقة، إذا كانت startSheet() ترجع true، فيتم التحقق ومعالجة جميع البيانات والخصائص للخلايا في صفوف الورقة وأعمدتها. بالنسبة لكل صف، يتم استدعاء startRow() للتحقق مما إذا كان بحاجة للمعالجة. إذا كان الصف بحاجة للمعالجة، يتم قراءة خصائص الصف أولاً ويمكن للمطورين الوصول إلى خصائصه بـ processRow().
إذا كانت خلايا الصف تحتاج أيضًا إلى المعالجة، يرجع processRow() true ويتم استدعاء startCell() لكل خلية موجودة في الصف للتحقق مما إذا كان بحاجة للمعالجة. إذا كان الأمر كذلك، يتم استدعاء processCell().
الكود البرنامج التالي يوضح هذه العملية. البرنامج يقرأ ملفًا كبيرًا يحتوي على ملايين السجلات. يستغرق وقتًا قليلاً لقراءة كل ورقة في دفتر العمل. يقوم الكود البرنامجي بقراءة الملف واسترجاع العدد الكلي للخلايا، وعدد السلاسل وعدد الصيغ لكل ورقة عمل.
فئة تقوم بتنفيذ واجهة LightCellsDataHandler