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

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

كيف اجعلة يقراء اى ملف باى لغة

كود :
    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
           'Dim da As New OleDbDataAdapter("SELECT * FROM [ورقة1$]", conn)
           'da.Fill(ds, "[ورقة1$]")
           'dvg_items.DataSource = ds.Tables("[ورقة1$]")

           Dim da As New OleDbDataAdapter("SELECT * FROM [Sheet1$]", conn)
           da.Fill(ds, "[Sheet1$]")
           dvg_items.DataSource = ds.Tables("[Sheet1$]")
       Else
           End
       End If

يعنى لو الملف عربي لازم اكتب الكود - ورقة1
لو انجليزى اكتب الكود sheet1
اريد ان يقراء الكل
الرد }}}
تم الشكر بواسطة:
#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

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

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

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

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


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

الرد }}}
#3
السلام عليكم ورحمة الله وبركاته

بعد التجارب على الكود المذكور في ردي السابق
تم بفضل الله وحده
تقليل حجم الكود
وجعله أكثر مرونة 

وتم وضعه في موضوع مستقل للأفادة العامة 


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

الرد }}}
تم الشكر بواسطة: new_programer
#4
بارك الله فيك اخي وذادك من علمه
جاري تجربة الكود وسوف ابلغكم بالنتيجة لتعم الفائدة
لدى كود اخر يقوم بفتح اى ملف اكسيل لكنه يتعارض مع الكود الذى استخدموا سوف ارسلة للتعديل علية ونستفيد
الرد }}}
تم الشكر بواسطة:
#5
Dim dt_cust As New DataTable

ليه بيتعارض مع الكود التالي

Imports Microsoft.Office.Interop.Excel
الرد }}}
تم الشكر بواسطة:



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


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