17 | Connect VB.NET to an Excel File and Retrieve Table Names - VB.NET

شرح الكود:


الكود يقوم بفتح نافذة لاختيار ملف Excel باستخدام OpenFileDialog، ثم يتم استخراج المسار واسم الملف من هذا الملف الذي تم اختياره، وبعد ذلك يتم فتح اتصال بقاعدة بيانات OLE DB لقراءة جداول Excel.

OFD.Filter = "File Formats (*.XLSX; *.XLS;) | *.xlsx; *.xls;"

  • يتم فتح الاتصال بقاعدة البيانات، ثم يتم تنفيذ الأمر باستخدام ExecuteNonQuery

١. فتح نافذة لاختيار الملف باستخدام OpenFileDialog:

الكود يقوم بفتح نافذة لاختيار ملف Excel باستخدام OpenFileDialog مع فلترة الملفات لامتداد .xls و .xlsx فقط.

OFD.Filter = "File Formats (*.XLSX; *.XLS;) | *.xlsx; *.xls;"


    ٢. التأكد من اختيار المستخدم لملف:

    إذا اختار المستخدم ملفًا من خلال نافذة OpenFileDialog، يتم تنفيذ الكود التالي داخل شرط If. أما إذا تم إغلاق النافذة دون اختيار أي ملف، فإن العملية ستتوقف.

    If OFD.ShowDialog = DialogResult.OK Then

    End If


    ٣. الحصول على مسار واسم الملف المختار:

    بمجرد أن يختار المستخدم ملفًا، يقوم الكود باستخراج المسار الكامل للملف باستخدام Path.GetDirectoryName وكذلك اسم الملف باستخدام Path.GetFileName، ويتم تخزين هذه القيم في TextBox (tbFilePath و tbFileName) لعرضها على المستخدم.

    tbFilePath.Text = Path.GetDirectoryName(OFD.FileName)

    tbFileName.Text = Path.GetFileName(OFD.FileName)


    ٤. فتح اتصال بقاعدة بيانات Excel باستخدام OLE DB:

    بعد أن يتم اختيار الملف، يتم إنشاء سلسلة الاتصال بـ OLE DB لفتح الاتصال مع ملف Excel، حيث يتم تحديد اسم الملف والمسار في سلسلة الاتصال.

    connection.ConnectionString = "Provider= Microsoft.ACE.OLEDB.12.0; Data Source=" & tbFilePath.Text & "\" & tbFileName.Text & "; Extended Properties= Excel 12.0;"


    ٥. جلب الجداول من الملف:

    في هذا الجزء من الكود، يتم التعامل مع قاعدة بيانات Excel (أو أي مصدر بيانات يدعم OLE DB) لجلب قائمة الجداول الموجودة داخل الملف باستخدام GetSchema


    ١. تعريف مصفوفة restrictions:

    Dim restrictions() As String = New String(3) {}

    restrictions(3) = "Table"

    هنا يتم تعريف مصفوفة restrictions من النوع String، وهي تحتوي على ٤ عناصر (مصفوفة بأربعة مواقع)، ولكن في الواقع يتم استخدام الموضع الرابع (restrictions(3)).

    • restrictions(3) = "Table": هنا يتم تعيين قيمة "Table" للمصفوفة في الموضع الثالث.
    • هذا يعني أنه عند استخدام GetSchema، سيتم طلب الجداول (Tables) من قاعدة البيانات (الملف Excel في هذه الحالة).

    ٢. إنشاء DataTable:

    Dim dtTables As New DataTable

    dtTables.Clear()

    • dtTables هو DataTable سيُستخدم لتخزين النتائج القادمة من GetSchema.
    • يتم مسح أي بيانات قد تكون موجودة مسبقًا في dtTables باستخدام Clear.

    ٣. فتح الاتصال بقاعدة البيانات:

    connection.Open()

    • هنا يتم فتح الاتصال بقاعدة البيانات باستخدام connection الذي يحتوي على سلسلة الاتصال الخاصة بقاعدة البيانات (في هذه الحالة، ملف Excel يتم التعامل معه باستخدام OLE DB).

    ٤. استخدام GetSchema للحصول على الجداول:

    dtTables = connection.GetSchema("Tables", restrictions)

    • GetSchema("Tables", restrictions):
    • هذه الدالة تُستخدم للحصول على معلومات عن الكائنات في قاعدة البيانات. عند استخدامها مع المعامل "Tables"، فإنها تعيد معلومات حول الجداول في قاعدة البيانات (في هذه الحالة، جداول ملف Excel).
    • المعامل الثاني restrictions يمكن أن يحتوي على مجموعة من القيود أو الشروط لتحديد نوع الجداول أو الكائنات الأخرى.
    • في هذا الكود، المعامل restrictions(3) يحدد أنه يجب إرجاع الجداول فقط، مما يعني أن الكود سيبحث فقط عن الجداول في قاعدة البيانات، ولن يجلب الكائنات الأخرى مثل Views أو Stored Procedures.

    ٥. إغلاق الاتصال:

    connection.Close()

    • بعد أن يتم جلب الجداول، يتم إغلاق الاتصال بقاعدة البيانات.

    ٦. إفراغ قائمة الجداول في الـ ComboBox:

    cbTables.Items.Clear()

    • يتم مسح العناصر الموجودة في ComboBox (الذي يحمل اسم cbTables) بحيث يتم تحديث القائمة بالبيانات الجديدة القادمة من GetSchema.

    ملخص الكود:
    • يقوم الكود بفتح اتصال بقاعدة بيانات (في هذه الحالة، ملف Excel باستخدام OLE DB).
    • ثم يستخدم GetSchema("Tables", restrictions) للحصول على قائمة الجداول الموجودة في الملف.
    • بعد أن يتم جلب المعلومات، يتم إغلاق الاتصال وتهيئة الـ ComboBox cbTables ليتم ملؤه بالجداول التي تم العثور عليها.

    ملاحظة:

    يجب أن يكون لديك اتصال مفتوح باستخدام OLE DB قبل استخدام GetSchema، وهذا الاتصال يتم تحديده باستخدام سلسلة الاتصال في connection.ConnectionString.


    ٦. إضافة الجداول إلى ComboBox:

    إذا كانت هناك جداول في الملف، يتم إضافتها إلى ComboBox (cbTables) ليتمكن المستخدم من اختيار الجدول الذي يريد العمل عليه.

     Dim i As Integer

     For i = 0 To dtTables.Rows.Count - 1 Step i + 1

         cbTables.Items.Add(dtTables(i)(2).ToString)

    Next



      الكود كاملا داخل زر  -  btn_browse

      Private Sub btn_browse_Click(sender As Object, e As EventArgs) Handles btn_browse.Click

              OFD.Filter = "File Formats (*.XLSX; *.XLS;) | *.xlsx; *.xls;"

              If OFD.ShowDialog = DialogResult.OK Then

                  tbFilePath.Text = Path.GetDirectoryName(OFD.FileName)

                  tbFileName.Text = Path.GetFileName(OFD.FileName)

                  connection.ConnectionString = "Provider= Microsoft.ACE.OLEDB.12.0; Data Source=" & tbFilePath.Text & "\" & tbFileName.Text & "; Extended Properties= Excel 12.0;"

                  Dim restrictions() As String = New String(3) {}

                  restractions(3) = "Table"

       

                  Dim dtTables As New DataTable

                  dtTables.Clear()

                  connection.Open()

                  dtTables = connection.GetSchema("Tables", restrictions)

                  connection.Close()

                  cbTables.Items.Clear()

       

                  Dim i As Integer

                  For i = 0 To dtTables.Rows.Count - 1 Step i + 1

                      cbTables.Items.Add(dtTables(i)(2).ToString)

                  Next

       

              End If

          End Sub

      إذا كان لديك أي أسئلة أخرى أو تحتاج إلى مزيد من التوضيح، فلا تتردد في طرحها!

      يمكنكم متابعة الدرس عن طريق اليوتيوب






      تعليقات

      المشاركات الشائعة من هذه المدونة

      7 | Display column's stages from the database into ComboBox's Stage - VB.NET & SQL Server

      26 | Filter Students List based on students' stage and Group in DataGridView - VB.NET & SQL Server

      8 | Get selected Stage and Group IDs from their ComboBoxes - VB.NET & SQL Server