منتدى فيجوال بيسك لكل العرب | منتدى المبرمجين العرب

نسخة كاملة : مشكلة كود استيراد ملف اكسيل يقراء لغة واحدة فقط
أنت حالياً تتصفح نسخة خفيفة من المنتدى . مشاهدة نسخة كاملة مع جميع الأشكال الجمالية .
السلام عليكم

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

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

كود :
    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
اريد ان يقراء الكل
وعليكم السلام ورحمة الله وبركاته


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

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

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

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

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


تمنياتي لك بالتوفيق والنجاح
السلام عليكم ورحمة الله وبركاته

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

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

[مثال] إستيراد ملف Excel مهما كانت اللغة

تمنياتي لك بالتوفيق والنجاح
بارك الله فيك اخي وذادك من علمه
جاري تجربة الكود وسوف ابلغكم بالنتيجة لتعم الفائدة
لدى كود اخر يقوم بفتح اى ملف اكسيل لكنه يتعارض مع الكود الذى استخدموا سوف ارسلة للتعديل علية ونستفيد
Dim dt_cust As New DataTable

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

Imports Microsoft.Office.Interop.Excel