تقييم الموضوع :
  • 0 أصوات - بمعدل 0
  • 1
  • 2
  • 3
  • 4
  • 5
[Solved] - تغير أسماء الأعمدة عند استخراج البيانات الى excel
#1
السلام عليكم 

عندي كود استخدمة لاستخراج جميع البيانات من query الى excel 
الكود يعمل بشكل ممتاز، لكن كيف استطيع تغير عناوين الاعمده التي من ال table 

يعني اخلي أسم العمود من c_name الى اسم العميل 


هذا الكود المستعمل :

PHP كود :
Private Sub Excel()
 
       Dim dataAdapter As New SqlClient.SqlDataAdapter()
 
       Dim dataSet As New DataSet
        Dim command 
As New SqlClient.SqlCommand
        Dim datatableMain 
As New System.Data.DataTable()

 
       'Assign your connection string to connection object
        command.Connection = SQL.conn
        command.CommandType = CommandType.Text
        '
You can use any command select
        command
.CommandText sqlstring

        dataAdapter
.SelectCommand command

        Try
            
'This section help you if your language is not English.
            '
System.Threading.Thread.CurrentThread.CurrentCulture =
 
           '        System.Globalization.CultureInfo.CreateSpecificCulture("en-US")
            Dim oExcel As Microsoft.Office.Interop.Excel.Application
            Dim oBook As Microsoft.Office.Interop.Excel.Workbook
            Dim oSheet As Microsoft.Office.Interop.Excel.Worksheet
            oExcel = CreateObject("Excel.Application")
            oBook = oExcel.Workbooks.Add()
            oSheet = oBook.Worksheets(1)

            Dim dc As System.Data.DataColumn
            Dim dr As System.Data.DataRow
            Dim colIndex As Integer = 0
            Dim rowIndex As Integer = 0

            '
Fill data to datatable
            SQL
.conn.Open()
 
           dataAdapter.Fill(datatableMain)
 
           SQL.conn.Close()


 
           'Export the Columns to excel file
            For Each dc In datatableMain.Columns
                colIndex = colIndex + 1
                oSheet.Cells(1, colIndex) = dc.ColumnName
            Next

            '
Export the rows to excel file
            For Each dr In datatableMain
.Rows
                rowIndex 
rowIndex 1
                colIndex 
0
                For Each dc In datatableMain
.Columns
                    colIndex 
colIndex 1
                    oSheet
.Cells(rowIndex 1colIndex) = dr(dc.ColumnName)
 
               Next
            Next


            
' for the header 
            oSheet.Rows(1).Font.Name = "Droid Arabic Kufi"
            oSheet.Rows(1).Font.size = 11
            oSheet.Rows(1).Font.Bold = True
            Dim mycol As System.Drawing.Color = System.Drawing.ColorTranslator.FromHtml("#20b2aa")
            oSheet.Rows(1).Font.color = mycol

            ' 
for all the sheet without header
            
'oSheet.Range("A1", "Z" & rowIndex & "").Font.Name = "Droid Arabic Kufi"
            '
wSheet.Columns.AutoFit.fornt.name "Droid Arabic Kufi"
 
           oSheet.Range("a2""Z" rowIndex "").Font.Size 10
            
' make the sheet Alignment center
            oSheet.Range("a1", "Z" & rowIndex & "").HorizontalAlignment = Microsoft.Office.Interop.Excel.XlHAlign.xlHAlignCenter

            Dim strFileName As String = SaveFileDialog1.FileName
            Dim blnFileOpen As Boolean = False

            Try
                Dim fileTemp As System.IO.FileStream = System.IO.File.OpenWrite(strFileName)
                fileTemp.Close()
            Catch ex As Exception
                blnFileOpen = False
                Exit Sub
            End Try

            If System.IO.File.Exists(strFileName) Then
                System.IO.File.Delete(strFileName)
            End If

            oSheet.Columns.AutoFit()

            ' 
this add Grid line to all rows and columns 
            Dim formatRange 
As Microsoft.Office.Interop.Excel.Range oSheet.UsedRange
            Dim cell 
As Microsoft.Office.Interop.Excel.Range oSheet.Range("a1""D" rowIndex "")
 
           Dim border As Microsoft.Office.Interop.Excel.Borders cell.Borders
            border
.LineStyle Microsoft.Office.Interop.Excel.XlLineStyle.xlContinuous
            border
.Weight 1.0

            
' this add header and footer when printing the sheet
            oSheet.PageSetup.CenterHeader = "&""Droid Arabic Kufi,Bold""&14مصروفات المحددة"
            oSheet.PageSetup.RightFooter = DateTime.Now
            oSheet.PageSetup.LeftFooter = "Page &P of &N"

            '
make the print page horizontal
            oSheet
.PageSetup.Orientation Microsoft.Office.Interop.Excel.XlPageOrientation.xlPortrait

            
'make all columns fit in one page
            oSheet.PageSetup.Zoom = False
            oSheet.PageSetup.FitToPagesWide = 1
            oSheet.PageSetup.FitToPagesTall = False

            Try
                Dim range = oSheet.FindString("shop_id", False, False)
                oSheet.Replace(range.Value, "shop_id")
            Catch e1 As System.Exception

            End Try

            '
Save file in final path
            oBook
.SaveAs(strFileName)
 
           oExcel.Workbooks.Open(strFileName)
 
           oExcel.Visible True

            
'Release the objects
            releaseObject(oSheet)
            releaseObject(oBook)
            releaseObject(oExcel)
            '
Some time Office application does not quit after automation
 
           'so i am calling GC.Collect method.
            GC.Collect()

            MessageBox.Show("Export done successfully!")

        Catch ex As Exception
            MessageBox.Show(ex.Message, "Warning", MessageBoxButtons.OK)
        End Try
    End Sub
    Private Sub releaseObject(ByVal obj As Object)
        Try
            System.Runtime.InteropServices.Marshal.ReleaseComObject(obj)
            obj = Nothing
        Catch ex As Exception
            obj = Nothing
        Finally
            GC.Collect()
        End Try
    End Sub 
الرد }}}
تم الشكر بواسطة:
#2
الجزء ده هو المسئول عن كتابة اسماء الاعمدة في الكسيل
PHP كود :
For Each dc In datatableMain.Columns
                    colIndex 
= colIndex + 1
                    oSheet
.Cells(rowIndex + 1, colIndex) = dr(dc.ColumnName)
                Next 
تقدر تعمل مصفوفة نصوص وتضع اسماء الى تريدها 
ثم تعديل  الجملة السابقة بالمصفوف ضمن for each
صلى الله على نبينا محمد
اخيكم / محمود صالح
  قال الزهري رحمه الله  
 مــا عُـــبـِد الله بشئ أفضل من العلم 
الرد }}}
تم الشكر بواسطة: عبد العزيز البسكري , Rabeea Qbaha
#3
تستطيع تغيير اسماء الأعمدة من خلال الاستعلام نفسه
او تغير اسماء أعمدة الجدول datatableMain بعد التعبئة
وبدون المشروع يصعب اعطاءك الجواب السريع
الرد }}}
تم الشكر بواسطة: محمود صالح
#4
(01-02-18, 04:57 AM)طالب برمجة كتب : تستطيع تغيير اسماء الأعمدة من خلال الاستعلام نفسه
او تغير اسماء أعمدة الجدول datatableMain بعد التعبئة
وبدون المشروع يصعب اعطاءك الجواب السريع

المثود الخاصة بالاستخراج موضحة بالكامل في الاعلى اخي، اذا كان لديك الوقت ان امكن 
ارشدني للطريقة وشكرا

(01-02-18, 03:38 AM)محمود صالح كتب : الجزء ده هو المسئول عن كتابة اسماء الاعمدة في الكسيل
PHP كود :
For Each dc In datatableMain.Columns
                    colIndex 
= colIndex + 1
                    oSheet
.Cells(rowIndex + 1, colIndex) = dr(dc.ColumnName)
                Next 
تقدر تعمل مصفوفة نصوص وتضع اسماء الى تريدها 
ثم تعديل  الجملة السابقة بالمصفوف ضمن for each

هل من الممكن اخي التوضيح اكثر .
الرد }}}
تم الشكر بواسطة:
#5
ما اقصده جملة select كاملة التي في المتغير sqlstring وهو الجزء الغير موضح في "المثود الخاصة" على حد قولك
بحيث تعطي كل عمود اسم آخر عن طريق AS مثل
PHP كود :
SELECT [FirstName] AS [الاسم الأولFROM [sheet1$] 
في هذا الاستعلام يتم عرض "الاسم الأول" في الداتاجريد بدلا من FirstName
الرد }}}
تم الشكر بواسطة:
#6
(01-02-18, 11:42 PM)طالب برمجة كتب : ما اقصده جملة select كاملة التي في المتغير sqlstring وهو الجزء الغير موضح في "المثود الخاصة" على حد قولك
بحيث تعطي كل عمود اسم آخر عن طريق AS مثل
PHP كود :
SELECT [FirstName] AS [الاسم الأولFROM [sheet1$] 
في هذا الاستعلام يتم عرض "الاسم الأول" في الداتاجريد بدلا من FirstName

شكرا للرد صديقي، بالفعل هذة طريثة ناجحة، لكن انا استخدم جملة الاستعلام نفسها للبحث والاستخراج لعدم كتابتها اكثر من مره 
يعني جملة استعلام تعبئة ال gridview هي نفسها جملة الاستعلام التي نقوم باستخراج البيانات للاكسل 
هل هناك طريثة أخرى ؟؟
وشكرا
الرد }}}
تم الشكر بواسطة:
#7
طالما أن جملة استعلام موحدة اجعلها في متغير عام بنفس الطريقة
وإن أردت طريقة أخرى فأرسل لي مشروعك لعلي أتمكن من خدمتك رغم انشغالي
الرد }}}
تم الشكر بواسطة: Rabeea Qbaha , عبد العزيز البسكري
#8
(02-02-18, 12:01 AM)طالب برمجة كتب : طالما أن جملة استعلام موحدة اجعلها في متغير عام بنفس الطريقة
وإن أردت طريقة أخرى فأرسل لي مشروعك لعلي أتمكن من خدمتك رغم انشغالي


وهي بالفعل كذلك صديقي، لكن ان قمت باعادة صياغة جمله الاستعلام مع تغير اسم العمود هل سيتغير شيء في بيانات ال datagridview ??
الرد }}}
تم الشكر بواسطة:
#9
ستتغير اسماء الأعمدة المعروضة في الداتاجريدفيو، والمسألة للعرض فقط
أما التحديث أو الإضافة فيجب أن تتم على أسماء الأعمدة الحقيقية
الرد }}}
تم الشكر بواسطة: Rabeea Qbaha
#10
أشكركم اخواني على الوقت و المجهود 
وشكرا طالب البرمجة على اهتمامك صديقي 
اعتمدت هذة الطريقة في اسهل لاني اقوم بتعديل مشروع كامل 
ويحتوي على الكثير سيوقر علي تعديل جملة الاستعلام

على كلن اعتمدت هذة الطريقه :

PHP كود :
For Each dc In datatableMain.Columns
                colIndex 
colIndex 1

                Select 
Case dc.ColumnName
                    Case 
"id"
 
                       oSheet.Cells(rowIndex 1colIndex) = "الرقم"
 
                   Case "p_id"
 
                       oSheet.Cells(rowIndex 1colIndex) = "رقم الصنف"
 
                   Case "p_name"
 
                       oSheet.Cells(rowIndex 1colIndex) = "أسم الصنف"
 
                   Case "p_size"
 
                       oSheet.Cells(rowIndex 1colIndex) = "الحجم"
 
                   Case "p_m_price"
 
                       oSheet.Cells(rowIndex 1colIndex) = "سعر المتر"
 
                   Case "p_price"
 
                       oSheet.Cells(rowIndex 1colIndex) = "السعر"
 
                   Case "date"
 
                       oSheet.Cells(rowIndex 1colIndex) = "تاريخ الحركة"
 
                   Case "note"
 
                       oSheet.Cells(rowIndex 1colIndex) = "الملاحظات"
 
                   Case Else
 
                       oSheet.Cells(rowIndex 1colIndex) = dc.ColumnName
                End Select
            Next 
الرد }}}
تم الشكر بواسطة: طالب برمجة


المواضيع المحتمل أن تكون متشابهة .
الموضوع : الكاتب الردود : المشاهدات : آخر رد
  [VB.NET] حل مشكلة الاتصال بقواعد البيانات access loay775 2 158 25-02-24, 06:29 AM
آخر رد: loay775
  سؤال عن عملية حذف سجل من قاعدة البيانات assuhimi 3 249 11-02-24, 08:43 PM
آخر رد: assuhimi
  [VB.NET] منع تكرار البيانات في عند الادخال مبرمج صغير 1 2 255 24-01-24, 05:18 PM
آخر رد: مبرمج صغير 1
  [VB.NET] مساعدة في استدعاء البيانات معينه من form الأول إلى form 2 بدون التعديل loay775 2 275 18-01-24, 05:04 PM
آخر رد: loay775
  [VB.NET] إعادة استدعاء البيانات من قاعدة بيانات اكسس والاهم الصورة مبرمج صغير 1 1 273 13-01-24, 01:17 PM
آخر رد: مبرمج صغير 1
  جلب مجال أسماء sql محمد العموري 2 203 05-01-24, 12:15 AM
آخر رد: HALIM ELEULMA
  [كود] اريد كود إرسال البيانات من الفيجوال بيسك إلىPDF issamsaidd 10 5,829 25-12-23, 06:30 PM
آخر رد: الحزين اليماني
  جملة الاتصال بقاعدة البيانات اكسس محمد خيري 4 364 12-12-23, 03:14 AM
آخر رد: محمد خيري
  استخراج الشهر الهجري kebboud 2 258 04-12-23, 07:51 PM
آخر رد: kebboud
  كود الاتصال بقاعدة البيانات sqlserver strongriseman 2 421 29-11-23, 09:25 PM
آخر رد: العتيق

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


يقوم بقرائة الموضوع: بالاضافة الى ( 1 ) ضيف كريم