تقييم الموضوع :
  • 0 أصوات - بمعدل 0
  • 1
  • 2
  • 3
  • 4
  • 5
جعل الاعمدة auto fit في ملف ال excel المصدر من datatable
#1
السلام عليكم
 عندي class حصلت علية من المنتدى يقوم بنقل البيانات من ال datatable الى ملف excel
يعمل بشكل ممتاز لكن اريد ان اعدل علية ليقوم بجعل عرض الاعمدة في ملف ال excel بنفس عرض الاعمدة 
في ال datagrid او ان تكون الاعمدة auto-fit حسب حجم البيانات في العمود

ارجو المساعدة

PHP كود :
Imports System.IO
Public Class ExportToExcelClr
    Public Sub ExportToExcel
(datatable As DataTableGV As DataGridViewfilename As StringOptional OpenDialog As Boolean FalseOptional SameColumnsWidth As Boolean True)
 
       Dim FlNm As String ""
 
       Dim sv As New SaveFileDialog
        sv
.FileName filename
        sv
.Filter "|*.xls"
 
       If sv.ShowDialog <> DialogResult.OK Then Exit Sub
        FlNm 
sv.FileName
        Dim fs 
As New StreamWriter(FlNmFalse)
 
       With fs
            
.WriteLine("<?xml version=""1.0""?>")
 
           .WriteLine("<?mso-application progid=""Excel.Sheet""?>")
 
           .WriteLine("<Workbook xmlns=""urn:schemas-microsoft-com:office:spreadsheet"">")
 
           .WriteLine("  <Styles>")
 
           .WriteLine("  <Style ss:ID=""hdr"">")
 
           .WriteLine("  <Alignment ss:Horizontal=""Center""/>")
 
           .WriteLine("  <Borders>")
 
           .WriteLine("    <Border ss:Position=""Left"" ss:LineStyle=""Continuous"" ss:Weight=""1""/>")
 
           .WriteLine("    <Border ss:Position=""Right"" ss:LineStyle=""Continuous"" ss:Weight=""1""/>")
 
           .WriteLine("    <Border ss:Position=""Top"" ss:LineStyle=""Continuous"" ss:Weight=""1""/>")
 
           .WriteLine("  </Borders>")
 
           .WriteLine("  <Font ss:FontName=""Droid Arabic Kufi"" ss:Size=""8"" ss:Bold=""1""/>"'SET FONT
            .WriteLine("  </Style>")
            .WriteLine("  <Style ss:ID=""ksg"">")
            .WriteLine("  <Alignment ss:Vertical=""Bottom""/>")
            .WriteLine("  <Borders/>")
            .WriteLine("  <Font ss:FontName=""Arial""/>") '
SET FONT
            
.WriteLine("  </Style>")
 
           .WriteLine("  <Style ss:ID=""isi"">")
 
           .WriteLine("  <Borders>")
 
           .WriteLine("    <Border ss:Position=""Bottom"" ss:LineStyle=""Continuous"" ss:Weight=""1""/>")
 
           .WriteLine("    <Border ss:Position=""Left"" ss:LineStyle=""Continuous"" ss:Weight=""1""/>")
 
           .WriteLine("    <Border ss:Position=""Right"" ss:LineStyle=""Continuous"" ss:Weight=""1""/>")
 
           .WriteLine("    <Border ss:Position=""Top"" ss:LineStyle=""Continuous"" ss:Weight=""1""/>")
 
           .WriteLine("  </Borders>")
 
           .WriteLine("  <Font ss:FontName=""Arial"" ss:Size=""11""/>")
 
           .WriteLine("  </Style>")
 
           .WriteLine("  </Styles>")
 
           .WriteLine("  <Worksheet ss:Name=""sheet1"">")
 
           .WriteLine("  <Table>")

 
           For i As Integer 0 To GV.ColumnCount 1
                
.WriteLine("  <Column ss:AutoFitWidth=""0""/>")
 
           Next

            
.WriteLine("  <Row ss:StyleID=""ksg"">")

 
           For i As Integer 0 To GV.ColumnCount 1
                Application
.DoEvents()
 
               .WriteLine("  <Cell ss:StyleID=""hdr"">")
 
               .WriteLine("    <Data ss:Type=""String"">{0}</Data>"GV.Columns.Item(i).HeaderText)
 
               .WriteLine("  </Cell>")
 
           Next


            
.WriteLine("  </Row>")
 
           For intRow As Integer 0 To datatable.Rows.Count 1
                Application
.DoEvents()
 
               .WriteLine("  <Row ss:StyleID=""ksg"" ss:utoFitHeight =""0"">")
 
               For intCol As Integer 0 To datatable.Columns.Count 1
                    Application
.DoEvents()
 
                   .WriteLine("  <Cell ss:StyleID=""isi"">")
 
                   .WriteLine("  <Data ss:Type=""String"">{0}</Data>"GV.Item(intColintRow).Value.ToString)
 
                   .WriteLine("  </Cell>")
 
               Next
                
.WriteLine("  </Row>")
 
           Next
            
.WriteLine("  </Table>")
 
           .WriteLine("  </Worksheet>")
 
           .WriteLine("</Workbook>")
 
           .Close()
 
           If OpenDialog Then
                Dim msg1
                msg1 
MsgBox("تم الاستخراج ... هل تريد فتح الملف ؟"MsgBoxStyle.YesNo MsgBoxStyle.Question"Export")
 
               If msg1 vbNo Then Exit Sub
                Process
.Start(FlNm)
 
           End If
 
       End With
    End Sub
    Sub DataGridView_COLORE_FOR_ME
(ByVal DataGridViewXT As Object)
 
       Try
            
'-------------------------------------------------------------------------------------------
            DataGridViewXT.DefaultCellStyle.BackColor = Color.FromArgb(255, 255, 255)
            DataGridViewXT.AlternatingRowsDefaultCellStyle.BackColor = Color.FromArgb(255, 255, 192)
            '
-------------------------------------------------------------------------------------------
 
       Catch ex As Exception
            MsgBox
(ex.MessageMsgBoxStyle.Critical MsgBoxStyle.MsgBoxRight MsgBoxStyle.MsgBoxRtlReading"Error")
 
       End Try
 
   End Sub
End 
Class 
الرد }}}
تم الشكر بواسطة:
#2
الكلاس كاملة حتى عرض العامود بالقيمة true عند إستدعائها من الفورم كالاتي : 
1 - هاكذا تأخذ عرض العامود في جدول الفورم

كود :
Dim clr As New ExportToExcelClr
clr.ExportToExcel(DataGridView1, True, True)
2 - هاكذ تكون الاعمدة auto-fit

كود :
Dim clr As New ExportToExcelClr
clr.ExportToExcel(DataGridView1, True, False)
الرد }}}
تم الشكر بواسطة: elgokr
#3
هذا الكود سريع فى التصدير بس بيصدر يجعل البيانات نص كلها فى ملف اكسيل . لو فى طريقة جعل بيانات تظهر رقمى فى ملف اكسيل المصدر ؟
الرد }}}
تم الشكر بواسطة:



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


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