17-02-19, 09:34 AM
وعليكم السلام ورحمة الله وبركاته
على أفتراض أن أسم الشيت لا يتغير وهو الأفتراضي
فسيكون sheet1 أو ورقة1 أو أي لغة تانية
ما رأيك أن نحدد أولا هل الشيت مكتوب بالعربي ولا الانجليزي ولا الفرنسي
في الحالة هذة يجب أن نحصل على أسم الشيت
وبالتالي بعد البحث وجدت كود ووضعته في دالة لكي يجلب لنا اسماء الشيتات كلها في الملف وهو كالتالي
كود :
Private Function sheetname(path)
Dim xl As New Excel.Application
' Dim xlsheet As Excel.Worksheet
Dim xlwbook As Excel.Workbook
xlwbook = xl.Workbooks.Open(path)
' xlsheet = xlwbook.Sheets.Item(1)
For Each sht In xlwbook.Worksheets
ListBox1.Items.Add(sht.Name)
Next
xl.ActiveWorkbook.Close(False, path)
xl.Quit()
xlwbook = Nothing
xl = Nothing
End Functionطبعا هاتلاحظ في الدالة بتطلب منك شيئين
أولا مسار الملف في الدالة نفسها
ثانيا listbox لتعبئتة باسماء الشيتات
الأن الخطوة الثانية وعلى أفتراض ان اننا عرفنا اسم اول شيت مثلا يبقى المشكلة تم حلها بقاعدة if كالتالي
كود :
Dim sheet As String
If ListBox1.Items.Item(0).ToString.Contains("ورقة") = True Then
sheet = "[ورقة1$]"
ElseIf ListBox1.Items.Item(0).ToString.Contains("Sheet") = True Then
sheet = "[Sheet1$]"
End Ifالأن الخطوة الثالثة نوظف الدالة وقاعدة if في كود الأستيراد لتلبيه طلبك وهو تشغيل الملف بأي لغة
وبيصير الكود النهائي كالتالي
كود :
Dim ofd As New OpenFileDialog
ofd.Filter = "Excel 2007|*.xlsx|Excel 2003|*.xls"
If ofd.ShowDialog = System.Windows.Forms.DialogResult.OK Then 'Windows.Forms.DialogResult.OK Then
dvg_items.DataSource = Nothing
dvg_items.Columns.Clear()
Dim path As String = ofd.FileName
Dim conn As New OleDb.OleDbConnection("PROVIDER=MICROSOFT.ACE.OLEDB.12.0;DATA SOURCE=" & path & "; EXTENDED PROPERTIES=EXCEL 12.0;")
Dim ds As New DataSet
sheetname(ofd.FileName)
Dim sheet As String
ListBox1.SelectedIndex = 0
If ListBox1.Items.Item(0).ToString.Contains("ورقة") = True Then
sheet = "[ورقة1$]"
ElseIf ListBox1.Items.Item(0).ToString.Contains("Sheet") = True Then
sheet = "[Sheet1$]"
End If
If sheet = "[ورقة1$]" Then
Dim da As New OleDbDataAdapter("SELECT * FROM " & sheet, conn)
da.Fill(ds, sheet)
dvg_items.DataSource = ds.Tables(sheet)
ElseIf sheet = "[Sheet1$]" Then
Dim da As New OleDbDataAdapter("SELECT * FROM " & sheet, conn)
da.Fill(ds, sheet)
dvg_items.DataSource = ds.Tables(sheet)
End If
Else
End
End Ifطبعا تقدر تزود الشروط للغات الثانية على حسب حاجاتك
وفي الأخير يتبقى أفتراض مهم جداً وهو ماذا لو أن أسماء الشيتات تم تغييرها من قبل المستخدم ؟؟
هذا السؤال أتركه للأساتذة والأخوة الأفاضل هنا في المنتدى
لأنه خارج حدود علمي للأسف
ملحوظة الحل المقدم في الأعلى ما هو إلا مجرد حل من طالب علم مبتدئ
وأكيد لدى أساتذتي وأخوتى هنا حل أفضل برمجياً
تمنياتي لك بالتوفيق والنجاح
لا إله إلا الله وحده لا شريك له له الملك وله الحمد وهو على كل شئ قدير
سبحان الله وبحمده سبحان الله العظيم
سبحان الله والحمد لله ولا إله إلا الله والله أكبر ولا حول ولا قوة إلا بالله العلى العظيم
رب أغفر لي

