تقييم الموضوع :
  • 0 أصوات - بمعدل 0
  • 1
  • 2
  • 3
  • 4
  • 5
مشكلة كود استيراد ملف اكسيل يقراء لغة واحدة فقط
#2
وعليكم السلام ورحمة الله وبركاته


على أفتراض أن أسم الشيت لا يتغير وهو الأفتراضي  
فسيكون 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

طبعا تقدر تزود الشروط للغات الثانية على حسب حاجاتك

وفي الأخير يتبقى أفتراض مهم جداً وهو ماذا لو أن أسماء الشيتات تم تغييرها من قبل المستخدم ؟؟
هذا السؤال أتركه للأساتذة والأخوة الأفاضل هنا في المنتدى
لأنه خارج حدود علمي للأسف

ملحوظة الحل المقدم في الأعلى ما هو إلا مجرد حل من طالب علم مبتدئ 

وأكيد لدى أساتذتي وأخوتى هنا حل أفضل برمجياً


تمنياتي لك بالتوفيق والنجاح
لا إله إلا الله وحده لا شريك له له الملك وله الحمد وهو على كل شئ قدير
سبحان الله وبحمده سبحان الله العظيم
سبحان الله والحمد لله ولا إله إلا الله والله أكبر ولا حول ولا قوة إلا بالله العلى العظيم
رب أغفر لي 

الرد }}}


الردود في هذا الموضوع
RE: مشكلة كود استيراد ملف اكسيل يقراء لغة واحدة فقط - بواسطة princelovelorn - 17-02-19, 09:34 AM


التنقل السريع :


يقوم بقرائة الموضوع: