17 | Connect VB.NET to an Excel File and Retrieve Table Names - VB.NET
شرح الكود:
OFD.Filter = "File Formats (*.XLSX; *.XLS;) | *.xlsx; *.xls;"
- يتم فتح الاتصال بقاعدة البيانات، ثم يتم تنفيذ الأمر باستخدام
ExecuteNonQuery
١. فتح نافذة لاختيار الملف باستخدام OpenFileDialog:
OFD.Filter = "File Formats (*.XLSX; *.XLS;) | *.xlsx; *.xls;"
OFD.Filter = "File Formats (*.XLSX; *.XLS;) | *.xlsx; *.xls;"
٢. التأكد من اختيار المستخدم لملف:
If OFD.ShowDialog = DialogResult.OK Then
End If
If OFD.ShowDialog = DialogResult.OK Then
End If
٣. الحصول على مسار واسم الملف المختار:
tbFilePath.Text = Path.GetDirectoryName(OFD.FileName)
tbFileName.Text = Path.GetFileName(OFD.FileName)
tbFilePath.Text = Path.GetDirectoryName(OFD.FileName)
tbFileName.Text = Path.GetFileName(OFD.FileName)
٤. فتح اتصال بقاعدة بيانات Excel باستخدام OLE DB:
connection.ConnectionString = "Provider= Microsoft.ACE.OLEDB.12.0; Data Source=" & tbFilePath.Text & "\" & tbFileName.Text & "; Extended Properties= Excel 12.0;"
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"
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()
Dim dtTables As New DataTable
dtTables.Clear()
dtTables
هوDataTable
سيُستخدم لتخزين النتائج القادمة منGetSchema
.
- يتم مسح أي بيانات قد تكون موجودة مسبقًا في
dtTables
باستخدامClear
.
٣. فتح الاتصال بقاعدة البيانات:
connection.Open()
connection.Open()
- هنا يتم فتح الاتصال بقاعدة البيانات باستخدام
connection
الذي يحتوي على سلسلة الاتصال الخاصة بقاعدة البيانات (في هذه الحالة، ملف Excel يتم التعامل معه باستخدام OLE DB).
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
.
Dim i As Integer
For i = 0 To dtTables.Rows.Count - 1 Step i + 1
cbTables.Items.Add(dtTables(i)(2).ToString)
Next
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
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
إذا كان لديك أي أسئلة أخرى أو تحتاج إلى مزيد من التوضيح، فلا تتردد في طرحها!
تعليقات
إرسال تعليق