27-03-18, 11:34 PM
بســــم الله الرحمن الرحيم
و الصلاة و السلام على سيدنا محمد و على آله وصحبه اجمعين
الموضوع يتحدث عن التخاطب مع ملفات الاكســـــل من خلال مكتبتي (OpenXml - ClosedXml)
- المكتبة OpenXml معتمدة من قبل Microsoft , رابط مقال
- المكتبة ClosedXml مطورة عن المكتبة الاولى (اسهل و ايسر في التعامل و تشمل الاولى داخلها) - مصدر تعليمي
الموضوع يشمل عمليتي الاستيراد و التصدير من و الى ملفات الاكســــــل وفق المكاتب المذكورة.
منذ فترة ولم اكتب اي مقال او شيئ جديد بسبب مشاغلي الكثيرة , لذا التمس العذر منكم
طابت اوقاتكم جميعاً و اتمنى الفائدة للجميع.
صدقة العلم ان تعلمه لغيرك. لذا ارجو من الله ان تكون هذه صدقة لي.
البعض منا قد تعامل مع ملفات الاكسل من خلال اللغة و الكثير ممن تعاملوا معها كانو مجبورين على استخدام مراجع Com المملة و المزعجة اذ ان اطار العمل لدينا لم يوفر مراجع للتعامل مع هذه الملفات وغيرها من ملفات الاوفيس (رغم انها من انتاج نفس الشركة)
العيب مع ملفات Com انها فئات جامدة صممت خارج اطار العمل لا يمكن توقع نتائج سلوكياتها بشكل كبير و كذلك محدودية الوصل لبعض الفئات داخلها .... وغيرها الكثير.
من اكثر الامور المزعجة فيها - اختلاف اصدارات العمل (وفق نسخة الاوفيس المثبتة على الجهاز) و بالتالي انت مجبور على تعديل نسخة ملف المكتبة وفق النسخة التي يمتلكها العميل, وحتى لو كنت محترفاً واستخدمت Late Binding لتلافي اختلاف الاصدارات سيبقى الامر مزعجاً و يحتمل الكثير من الاخطاء.
الامر الاكثر ازعاجاً هو بطئ العمليات وفق هذه المكتبة , و خاصة عندما تتعامل مع ملفات كبيرة (فيها حجم كبير من البيانات).
كل التذمر السابق كان يخص المكتبة (MicroSoft.Office.Interop.Excel)
نبدأ على بركة الله مع تقديم بسيط .
الجيد في المكاتب المذكورة سابقاً كما يظهر من اسمها انها تتعامل مع الملفات ذات البنية الهرمية (ملفات Xml).
و الجيد اكثر ان ملفات اوفيس ذات اللاحقة المنتهية بالحرف (X) هي ملفات ذات بنية هرمية توافق ملفات Xml
من هذا الكلام يتين ان المكتبة قادرة على التعامل مع اكثر من نوع (Excel - Word) و غيرها ممن يوافق الشروط.
الحديث هنا سيقتصر على ملفات الاكسل فقط-و لك ان تبحر في فضاء المكتبة و تكتشف ما يناسب احتياجاتك.
اذا لم تطلع سابقاً على بنية ملفات Xml فهي مشابهة لما يلي
PHP كود :
XML
<?xml version="1.0" encoding="UTF-8" standalone="yes" ?>
<workbook xmlns=http://schemas.openxmlformats.org/spreadsheetml/2006/main xmlns:r="http://schemas.openxmlformats.org/officeDocument/2006/relationships">
<sheets>
<sheet name="MySheet1" sheetId="1" r:id="rId1" />
<sheet name="MySheet2" sheetId="2" r:id="rId2" />
</sheets>
</workbook>
يشابه هذا المفهوم بل ويطابق مفهوم هرمية السلطة , جماعة (Masson) يفهمون ذلك كثيراً (اعاذنا الله من شرورهم) .
لو نظرت للملف السابق ستجد اشياء مثل:
- (Spreadsheet) الرأس الاكبر في الملف (الاب الروحي) - و يمثل ملف الاكسل كاملاً .
و يحتوي بداخله كائنات من النوع (Sheets) و بدورها تحتوي على كائنات من النوع (Sheet) و التي تعرف بالاسم (WorkSheets) و تكون محتواة بدورها داخل (WorkBook).
في الملف السابق لدينا Spreadsheettml يحتوي على WorkBook و بداخله يحتوي على كائنين من النوع WorkSheet هما (MySheet1 - MySheet2)
اما كائن WorkSheet فهو لب الموضوع في عملنا لنلقي نظرة على الملف التالي
PHP كود :
<?xml version="1.0" encoding="UTF-8" ?>
<worksheet xmlns="http://schemas.openxmlformats.org/spreadsheetml/2006/main">
<sheetData>
<row r="1">
<c r="A1">
<v>100</v>
</c>
</row>
</sheetData>
</workshee
)الكائن SheetData يمثل عملياً جدول الخلايا و في هذا الجدول ستجد الصفوف و كل صف فيه خلية او اكثر و كل خلية فيها قيمة.
تعرف الخلية بالمرجع (رقم الصف و رقم العمود) مثل (A1 , B2 , C5) و هكذا.
لنلقي نظرة على بنية هذا الكائن WorkSheet .
PHP كود :
<?xml version="1.0" encoding="UTF-8" ?>
<worksheet xmlns="http://schemas.openxmlformats.org/spreadsheetml/2006/main">
<sheetData>
<row r="1">
<c r="A1">
<v>100</v>
</c>
</row>
</sheetData>
</worksheet>
معهم حق جماعة (Masson) يدوخونا , اذا كنت معي الى هنا سنكمل بعد قليل ان شاء الله...
يتبع........