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

نسخة كاملة : تصدير البيانات الى ملف اكسل
أنت حالياً تتصفح نسخة خفيفة من المنتدى . مشاهدة نسخة كاملة مع جميع الأشكال الجمالية .
السلام عليكم اخوتي الكرام
لأول مرة اتعامل مع الاكسل وقد قمت بكتابة كود تصدير البيانات من الداتا غرايد فيو في فيجوال بيسك الى ملف اكسل
الكود يعمل (على كيفه)مرة يقوم بالعمل يشكل جيد واحيانا لايقوم  بعملية التصدير واعيد الضغط على زر التصدير مرة ثانية   ليعمل واحيانا اضطر الى ضغطه ثلاث مرات لان عملية التصدير تفشل .. ومن اجل حل المشكلة مؤقتا كتبت ضمن الكود
جملة GOTO التي لاأحبها وهي تجبر الكود على الاعادة من الاول حتى يتم التصدير
 وبسبب قلة خبرتي مع الاكسل ارفق لكم
الكود ليصار الى تصحيح الخلل مشكورين
اتعامل مع VB2008 و Office 2003 
كود :
 Private Sub Btn_ExToExcel_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Btn_ExToExcel.Click
       If dgv_table.Rows.Count = 0 Then
           Exit Sub
       Else
           System.Threading.Thread.CurrentThread.CurrentCulture = System.Globalization.CultureInfo.CreateSpecificCulture("en-US")
           System.Windows.Forms.Cursor.Current = System.Windows.Forms.Cursors.WaitCursor
gg:
           Try
               Dim xlApp As New Application
               Dim excelworkBook As Microsoft.Office.Interop.Excel.Workbook = xlApp.Workbooks.Add
               Dim excelWorksheet As Microsoft.Office.Interop.Excel.Worksheet = CType(excelworkBook.Worksheets(1), Worksheet)
               xlApp.Visible = False
               Dim currCol As Integer = 1
               excelWorksheet.Cells.Select()
               excelWorksheet.Cells.Delete()
               For iC As Integer = 0 To dgv_table.Columns.Count - 1
                   If dgv_table.Columns(iC).Visible = True Then
                       excelWorksheet.Cells(1, currCol).Value = dgv_table.Columns(iC).HeaderText
                       currCol += 1
                   End If
               Next
               For i As Integer = 0 To dgv_table.RowCount - 1
                   currCol = 1
                   For j As Integer = 0 To dgv_table.Columns.Count - 1
                       If dgv_table.Columns(j).Visible = True Then
                           excelWorksheet.Cells(i + 2, currCol).value = dgv_table.Rows(i).Cells(j).FormattedValue
                           currCol += 1
                       End If
                   Next
               Next

               excelWorksheet.Rows("1:1").Font.FontStyle = "Normal"
               excelWorksheet.Rows("1:1").Font.Size = 10
               excelWorksheet.Cells.Columns.AutoFit()
               excelWorksheet.Cells.Select()
               excelWorksheet.Cells.EntireColumn.AutoFit()
               excelWorksheet.Cells(1, 1).Select()
               xlApp.Visible = True
           Catch ex As Exception
               GoTo gg ' اضطررت لاستخدام هذه العبارة وضحكت من نفسي على استخدامها
               'MsgBox("Export Excel Error " & ex.Message)
               MsgBox("فشلت عملية التصدير حاول مرة ثانية")
           Finally
               System.Windows.Forms.Cursor.Current = System.Windows.Forms.Cursors.Default

           End Try
       End If
   End Sub

تفضل هذا المثال مختلف كليا عن الطريقة العادية للتصدير آمل أن ينال إعجابك و يحل مشكلتك .
السلام عليكم اخي عاصم 
اتمنى ان تكون بصحة جيدة ونعمة وافرة 
شكرا على المثال وقم قمت بفتح الاكواد فقط قبل ان تقوم  بتحويل المثال الى 2008
ثم فتحت المثال 2008  تظهر فيه مشكلة الفتح في برنامج اكسل حيث رسالة خطأ واغلاق البرنامج
واذا حاولت فتح الملف المصدر ايضا يظهر خطأ وبغلق البرنامج ربما من نسخة الاوفيس  
شيئ آخر اعتقد ان الجدول كتب بلغة html !!!! ام انا مخطئ لان هذه اللغة لا افهمها 
ان كان بالامكان مثال صغير مع قاعدة بيانات access  وداتا غرايد والتصدير يكون اما من الداتا غرايد او الداتا تابل
او ان تجرب الكود الذي كتبته انا وتفحص اماكن الخلل
شكرا لك ولمساهمتك التي تزيد في ميزان حسناتك دمت بخير اخي عاصم
وضعت لك مثال مصمم ب 2008 به قاعدة بيانات و داتا غريد كما طلبت عدلت المشاركة الأولى و وضعت به ما طلبت الغ خاصية AllowUserToAddRows=false من الجدول تحل المشكلة أو عدل في لوب المديول و اجعله -2 بدل -1 تحل المشكلة أيضا .