تقييم الموضوع :
  • 0 أصوات - بمعدل 0
  • 1
  • 2
  • 3
  • 4
  • 5
[مقال] التخاطب مع الاكسل من خلال مكاتب OpenXml و Closed Xml
#1
بســــم الله الرحمن الرحيم
و الصلاة و السلام على سيدنا محمد و على آله وصحبه اجمعين

الموضوع يتحدث عن التخاطب مع ملفات الاكســـــل من خلال مكتبتي (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) الرأس الاكبر في الملف (الاب الروحي) - و يمثل ملف الاكسل كاملاً .  Big Grin
  و يحتوي بداخله كائنات من النوع (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 
ستجد داخل كائن WorkSheet عناصر من النوع SheetData وهو الكائن الحاوي للبيانات (الرعية امثالنا  Big Grin )
الكائن 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> 
ستجد في الكائن (الجدول) SheetData في الصف الاول الخلية A1 و قيمتها = 100

معهم حق جماعة (Masson) يدوخونا , اذا كنت معي الى هنا سنكمل بعد قليل ان شاء الله...


يتبع........
اللهم لك الحمد كما ينبغي لجلال وجهك و عظيم سلطانك
في حل و ترحال
الرد }}}
تم الشكر بواسطة: محمد كريّم


الردود في هذا الموضوع
التخاطب مع الاكسل من خلال مكاتب OpenXml و Closed Xml - بواسطة ابو ليلى - 27-03-18, 11:34 PM

المواضيع المحتمل أن تكون متشابهة .
الموضوع : الكاتب الردود : المشاهدات : آخر رد
  تنفيذ كود vb.net من خلال مربع نص @@أبورائد@@ 20 15,694 06-10-21, 05:05 PM
آخر رد: الماجيك مسعد
Lightbulb [مقال] التعامل مع ملفات اوفيس من خلال مكتبة NPOI ابو ليلى 2 4,628 01-07-21, 11:42 AM
آخر رد: kebboud
  التــعامل مع cmd من خلال الدوت نت مبتدئ في الاحتراف 3 4,047 02-06-18, 12:36 AM
آخر رد: YousefOkasha
  الطباعة على الوورد من خلال الفيجوال بطريقة مبسطة abdullah 10 16,526 01-04-18, 03:16 AM
آخر رد: سعود الشامان
  حصرياً ( إطبع على الوورد من خلال برنامجك ) ( شرح بالصور ) m.sami.ak 21 13,516 23-02-18, 11:04 AM
آخر رد: احمد نعمة عبد السلام
  حصرياً على اليوتوب,,, إطبع على الوورد من خلال برنامجك ( شرح بالفيديو ) مبرمج أوتار 5 5,686 15-05-16, 05:06 PM
آخر رد: CLARO
  حصرياً على اليوتوب,,, إطبع على الوورد من خلال برنامجك ( شرح بالفيديو ) m.sami.ak 2 4,668 26-09-14, 04:47 PM
آخر رد: Zakhoy
  معالجة العمليات الحسابية من خلال مربع نص وإظهار النتيجة @@أبورائد@@ 9 6,833 25-05-13, 01:07 PM
آخر رد: shaker.soft
  مثال على Custom Serialization من خلال فئة اسم مستخدم وكلمة مرور RaggiTech 0 2,614 05-10-12, 01:42 AM
آخر رد: RaggiTech
  مقدمة إلى ربط الأجهزة على الشبكات من خلال Sockets - تم الانتهاء من سلسلة الدروس RaggiTech 0 6,187 04-10-12, 10:08 AM
آخر رد: RaggiTech

التنقل السريع :


يقوم بقرائة الموضوع: