21-01-17, 08:19 PM
Import Excel File To DataGridView
Table By Table Or Sheet By Sheet
استيراد بيانات ملف اكسل الى DataGridView
جدول جدول او ورقة ورقة
باستخدام المكتبة ExcelDataReader
Using ExcelDataReader
بســـــم الله الرحمن الرحيم
السلام عليكم و رحمة الله و بركاته
توجد العديد من الطرق لكيفية القراءة و الكتابة الى ملفات اكسل و بعضها لا يحتاج الى مكاتب خارجية , هذه المقالة تتحدث عن استخدام مكتبة خارجية بسيطة و مجانية و سهلة الاستخدام.
في البداية تحتاج الى انشاء مشروع جديد يحتوي على فورم واحد فقط , و نضع عليه الادوات التالية
- DataGridView - نسميها Dgv
- ComboBox1
- Button نسميه btnOpen
الان نذهب الى Solution Explorer و بيمين الماوس نضغط و من القائمة الظاهرة نختار NuGet Packages
و نتابع كما بالصورة
في اعلى الفورم نعرف DataSet ،سميها Result
PHP كود :
Dim Result As New DataSet
بعد ذلك و في حدث الضغط على الزر لفتح ملفات من النوع Excel
PHP كود :
Result.Clear()
Dgv.DataSource = Nothing
Using Ofd As New OpenFileDialog()
With Ofd
.Filter = "Excel 2003|*.xls|Excel 2007|*.xlsx"
.ValidateNames = True
End With
If Ofd.ShowDialog = DialogResult.OK Then
Dim fs As IO.FileStream = IO.File.Open(Ofd.FileName, IO.FileMode.Open, IO.FileAccess.Read)
Dim Reader As Excel.IExcelDataReader
If Ofd.FilterIndex = 1 Then
Reader = Excel.ExcelReaderFactory.CreateBinaryReader(fs)
Else
Reader = Excel.ExcelReaderFactory.CreateOpenXmlReader(fs)
End If
Reader.IsFirstRowAsColumnNames = True
Result = Reader.AsDataSet()
ComboBox1.Items.Clear()
For Each Dt As DataTable In Result.Tables
ComboBox1.Items.Add(Dt.TableName)
Reader.Close()
Next
End If
End Using
و لانني اريد التعامل مع كل ورقة على حدا لذا ساقوم بتحميل اسماء الاوراق كجداول الى ComboBox
و من ثم اسناد كائن DataGridView الى الجدول المحدد
PHP كود :
Private Sub ComboBox1_SelectedIndexChanged(sender As Object, e As EventArgs) Handles ComboBox1.SelectedIndexChanged
Dgv.DataSource = Result.Tables(ComboBox1.SelectedIndex)
End Sub
المكتبة موجودة مع المثال المرفق
بالتوفيق للجميع
اللهم لك الحمد كما ينبغي لجلال وجهك و عظيم سلطانك
في حل و ترحال