التعامل مع مصنفات الاكسل فى #C ... درس (8) قراءة مصنف أكسل بأستخدام مزود البيانات OLEDB وعرض القيم فى dataGridView

اذهب الى الأسفل

التعامل مع مصنفات الاكسل فى #C ... درس (8) قراءة مصنف أكسل بأستخدام مزود البيانات OLEDB وعرض القيم فى dataGridView Empty التعامل مع مصنفات الاكسل فى #C ... درس (8) قراءة مصنف أكسل بأستخدام مزود البيانات OLEDB وعرض القيم فى dataGridView

مُساهمة من طرف أحمد مناع في الثلاثاء ديسمبر 24, 2013 6:53 pm

بسم الله الرحمن الرحيم 

أهلا وسهلا بكم إخوانى الكرام ....فى [ندعوك للتسجيل في المنتدى أو التعريف بنفسك لمعاينة هذا الرابط] كنا قد تعلمنا كيفية قراءة مصنف أكسل باستخدام كائنات المكتبةExcel object Library وعن طريق حلقة دوران للحصول على جميع بيانات ورقة العمل الحالية ....فى هذا المقال سنتعلم كيفية قراءة مصنف أكسل لكن باستخدام OLEDB وهو أحد مزودات البيانات ADO.NET وايضا سنقوم بعرض بيانات مصنف الاكسل فى شبكة البيانات dataGridView وذلك على النحو التالى :


1__ فى البداية يجب أدراج المكتبة Excel object Library الى المشروع و ذلك من خلال تحديد ايقونة المشروع فى نافذة Solution Explorer ثم النقر يمين و من القائمة التى ستظهر قم باختيار الامر Add Reference

2_تحتاج إلى إضافة المرجع  Excel object Library في شفرة المشروع  و يتم ذلك على النحو التالى:
الكود:
using Excel = Microsoft.Office.Interop.Excel;

3_ يتم فتح الاتصال باستخدام موفر OLEDB بإستخدام نص الاتصال التالى :


Provider=Microsoft.ACE.OLEDB.8.0;Data Source=;Extended Properties="Excel 8.0;"


وفيما يلي وصف لكل جزء:


  1. Provider : هو موفر البيانات الرئيسى OLEDB  الذي يستخدم لفتح صفحة أكسل .. و يكون Microsoft.Jet.OLEDB.4.0 للاتصال بمصنفات أكسل تنسيق 97 فصاعدا أو Microsoft.ACE.OLEDB.12.0 للاتصال بمصنفات أكسل تنسيق 2007 حتى 2010 
  2. Data Source : هو المسار الكامل لمصنف Excel بالاضافة الى أمتداد الملف سواء كان  xlsx أو xls
  3. Extended Properties(اختياري): الخصائص الموسعة التى يمكن تطبيقها على مصنفات Excel  وأكثرها شيوعا هي ما يلي:



  • HDR :وهي تمثل رأس من الحقول في جدول اكسل. الافتراضية هي نعم. إذا كنت لا تملك fieldnames في رأس ورقة العمل الخاصة بك، يمكنك تحديد HDR = NO والتي سوف تحل الأعمدة من الجداول التي يجدها كما F1، F2الخ



  • ReadOnly : وهى خاصية يمكنك أستخدامها لجعل مصنف Excel هل هو في وضع للقراءة فقط عن طريق تحديد ReadOnly=true و افتراضيا الخاصية ReadOnly تساوى false حتى تتمكن من تعديل البيانات في المصنف الخاص بك



  • FirstRowHasNames: هو نفس HDR، يتم تعيين دائما إلى 1 (مما يعني صحيح) يمكنك تحديد ذلك كاذبة كما لو كنت لا تملك صف الرأس الخاص بك. إذا HDR هو نعم فالمزود يتجاهل هذه الخاصية.  



  • IMEX وكما ذكر أعلاه التفوق ديك لتخمين عدد الصفوف أو لتحديد نوع البيانات أنسب من العمود، قد تحدث مشكلة خطيرة من لديك مختلطة البيانات في عمود واحد. ويقول لديك بيانات من كلا صحيح والنص على عمود واحد، في هذه الحالة سوف تتفوق اختيار نوع البيانات التي تقوم على غالبية البيانات. وبالتالي فإنه يختار البيانات لنوع البيانات الذي تم تحديده الأغلبية، وترجع NULL لنوع البيانات الأقلية. إذا تم خلط النوعين على حد سواء في العمود، يختار الموفر الرقمية فوق النص. 



  • 4. Excel 8.0 ...وهو رقم إصدار مصنف إكسل الى Excel 8.0 وهو ينطبق على كافة المصنفات التي تم إنشاؤها في أي إصدار من Excel97 فصاعدا حتى 2003 ..ويمكنك إستخدام  جملة Excel 12.0 وهو رقم اصدار مصنف إكسل 2007 فما فوق.



وبعد ما تم إضاحة أعلاه فإن نص الاتصال بمصنف أكسل تنسيق 97 حتى 2003 على النحو التالى :
الكود:
Provider=Microsoft.Jet.OLEDB.4.0;Data Source=E:\\testexcel.xls;Extended Properties=\"Excel 8.0;HDR=YES;IMEX=1;MAXSCANROWS=15;READONLY=FALSE\""

و نص الاتصال بمصنف أكسل تنسيق 2007 حتى 2010 على النحو التالى :
الكود:
Provider=Microsoft.ACE.OLEDB.12.0;Data Source=E:\\testexcel.xlsx;Extended Properties=\"Excel 12.0;HDR=YES;IMEX=1;MAXSCANROWS=15;READONLY=FALSE\""

4_ تكوين نص الاوامر command string

من أجل قراءة ورقة عمل إكسل يتم تكوين نص الاوامر command string لتمريرة الى مزود البيانات ويتم ذلك من خلال عبارات SQL وتوجد أكثر من طريقة لبناء جملة أستعلام SQL لتحديد تلك البيانات وذلك على النحو التالى :

أ_طريقة استخدام أسم ورقة العمل Worksheet Name

وفيها يتم تحديد بيانات ورقة عمل إكسل بناء على أسمها ....وذلك كما فى الكود التالى :


الكود:
"SELECT * FROM [Sheet1$]

وكما ترون قمنا بإنشاء جملة استعلام عادية مع تحديد اسم ورقة العمل Sheet1 وإضافة علامة الدولار ($) إلى نهاية اسم ...هكذا تم تحديد البيانات المراد قرائتها...وتلك العبارة تقوم بتحديد جميع بيانات ورقة العمل كاملة

ب_ طريقة أستخدام النطاق المسمى Named Range

النطاق المسمى فى إكسل عبارة عن مجموعة سجلات مرتبطة بأسم ميعن فى ورقة عمل واحدة كجدول الموظفين ....جدول العملاء...الخ ويمكنك تسمية نطاق فى إكسل بأتباع الخطوات التالية :

_حدد الخلايا التي تحتوي على البيانات المراد أن تجعل لها نطاق مسمى .
_انقر بزر الماوس الأيمن داخل النطاق المحدد ثم انقر فوق تسمية نطاق.
_في مربع الحوار اسم جديد الذى سيظهر لك حدد اسماً للنطاق في مربع الاسم وانقر فوق موافق.

وهكذا نكون قد أنشأنا نطاق و ليكن بأسم ( SalesData ).....و بالتالى فإن جملة الاستعلام المطلوب إنشائها لقراءة بيانات هذا النطاق من خلال الفجوال بيسك ستكون على النحو التالى :


الكود:
"SELECT * FROM [SalesData]

ويمكنك ملاحظة أننا أستخدمنا أسم النطاق فقط بدون علامة الدولار ($) إلى نهاية اسم ....

ج_ طريقة استخدام النطاق غير المسمى Unnamed Range

النطاق غير المسمى هى مجموعة الخلايا التى يتم تحديدها بالماوس فى ورقة عمل إكسل والتى ينتج عنها قيمة رقيمة مثل A1:B10 فى شريط عنوان إكسل .....أذن جملة الاستعلام المطلوبة لقراءة تلك البيانات ستكون على النحو التالى :
الكود:
"SELECT * FROM [Sheet1$A1:B10]

5_ بعد شرح معظم شفرات الاتصال بمصنف أكسل اليكم الكود النهائى لقراءة ملف أكسل و عرض بيناته فى شبكة البيانات

الكود:
try
            {
                System.Data.OleDb.OleDbConnection MyConnection ;
                System.Data.DataSet DtSet ;
                System.Data.OleDb.OleDbDataAdapter MyCommand ;
                MyConnection = new System.Data.OleDb.OleDbConnection("provider=Microsoft.Jet.OLEDB.4.0;Data Source='c:\\csharp.xls';Extended Properties=Excel 8.0;");
                MyCommand = new System.Data.OleDb.OleDbDataAdapter("select * from [Sheet1$]", MyConnection);
                MyCommand.TableMappings.Add("Table", "TestTable");
                DtSet = new System.Data.DataSet();
                MyCommand.Fill(DtSet);
                dataGridView1.DataSource = DtSet.Tables[0];
                MyConnection.Close();
            }
            catch (Exception ex)
            {
                MessageBox.Show (ex.ToString());
            }

و فى النهاية ارجوا ان اكون قد وفقت فى إيصال المعلومة

ـــــــــــــــــــ التوقيع ــــــــــــــــــــ
سبحان الله وبحمدة .....سبحان الله العظيم
أحمد مناع
أحمد مناع
.
.

تاريخ التسجيل : 15/02/2011
المساهمات : 994
النقاط : 201783
التقيم : 119
الدولة : مصر
الجنس : ذكر

http://egy-tech.forumegypt.net

الرجوع الى أعلى الصفحة اذهب الى الأسفل

التعامل مع مصنفات الاكسل فى #C ... درس (8) قراءة مصنف أكسل بأستخدام مزود البيانات OLEDB وعرض القيم فى dataGridView Empty رد: التعامل مع مصنفات الاكسل فى #C ... درس (8) قراءة مصنف أكسل بأستخدام مزود البيانات OLEDB وعرض القيم فى dataGridView

مُساهمة من طرف ذوكا في السبت فبراير 01, 2014 2:53 pm

الله يبارك لك فى علمك
ذوكا
ذوكا
.....
.....

تاريخ التسجيل : 26/05/2013
المساهمات : 92
النقاط : 156
التقيم : 12
الدولة : مصر
الجنس : ذكر

الرجوع الى أعلى الصفحة اذهب الى الأسفل

الرجوع الى أعلى الصفحة

ََ

مواضيع ذات صلة


 
صلاحيات هذا المنتدى:
لاتستطيع الرد على المواضيع في هذا المنتدى