天天看點

.Net DataGridView 導出到Execl

将DataGridView 中的資料導出到Execl,可根據DataGridVeiw 的可見的列動态顯示.

代碼如下:

.Net DataGridView 導出到Execl

Public Sub PrintOutStoreNumDetail(ByVal Grid As DataGridView )

.Net DataGridView 導出到Execl
.Net DataGridView 導出到Execl

        Try

.Net DataGridView 導出到Execl

            Dim xlApp As New Excel.Application

.Net DataGridView 導出到Execl

            Dim xlWorkbook As Excel.Workbook

.Net DataGridView 導出到Execl

            Dim xlWorksheet As Excel.Worksheet

.Net DataGridView 導出到Execl

            Dim Rowindex As Int16, Colindex As Integer  '' 擷取datagridview的所有行和列

.Net DataGridView 導出到Execl

            Dim Arrary As New ArrayList   ''' 取得可見列的索引值

.Net DataGridView 導出到Execl

            Dim ColCount As Integer  =   0

.Net DataGridView 導出到Execl

            Dim ColNum As Integer  =   0

.Net DataGridView 導出到Execl

            xlWorkbook  =  xlApp.Workbooks.Add()

.Net DataGridView 導出到Execl

            xlWorksheet  =  xlWorkbook.Worksheets( " sheet1 " )

.Net DataGridView 導出到Execl
.Net DataGridView 導出到Execl

            Rowindex  =  Grid.Rows.Count

.Net DataGridView 導出到Execl
.Net DataGridView 導出到Execl

            For i As Integer  =   0  To Grid.Columns.Count  -   1

.Net DataGridView 導出到Execl

                If Grid.Columns(i).Visible  =  True Then

.Net DataGridView 導出到Execl

                    Arrary.Add(i)

.Net DataGridView 導出到Execl

                    ColCount  +=   1

.Net DataGridView 導出到Execl

                    Colindex  +=   1

.Net DataGridView 導出到Execl

                End If

.Net DataGridView 導出到Execl

            Next

.Net DataGridView 導出到Execl
.Net DataGridView 導出到Execl

            For i As Integer  =   0  To Arrary.Count  -   1

.Net DataGridView 導出到Execl

                xlApp.Cells( 1 , i  +   1 )  =  Grid.Columns(Arrary(i)).HeaderText

.Net DataGridView 導出到Execl

            Next

.Net DataGridView 導出到Execl

            For i As Int16  =   0  To Grid.Rows.Count  -   1

.Net DataGridView 導出到Execl

                For j As Integer  =   0  To Arrary.Count  -   1

.Net DataGridView 導出到Execl

                    If Grid.Columns(Arrary(j)).ValueType.Name Is System.Type.GetType( " System.String " ).Name Then

.Net DataGridView 導出到Execl

                        xlApp.Cells( 2   +  i, j  +   1 )  =   " ' "   &  Grid.Item(Arrary(j), i).Value.ToString

.Net DataGridView 導出到Execl

                    ElseIf Grid.Columns(Arrary(j)).ValueType.Name Is System.Type.GetType( " System.Decimal " ).Name Then

.Net DataGridView 導出到Execl

                        xlWorksheet.Columns(j  +   1 ).NumberFormatLocal  =   " 0.00_  "

.Net DataGridView 導出到Execl

                        xlApp.Cells( 2   +  i, j  +   1 )  =  Convert.ToDecimal(Grid.Item(Arrary(j), i).Value.ToString)

.Net DataGridView 導出到Execl

                        ColNum  =  Arrary(j)

.Net DataGridView 導出到Execl

                    ElseIf Grid.Columns(Arrary(j)).ValueType.Name Is System.Type.GetType( " System.Int32 " ).Name Then

.Net DataGridView 導出到Execl

                        xlApp.Cells( 2   +  i, j  +   1 )  =  Grid.Item(Arrary(j), i).Value.ToString

.Net DataGridView 導出到Execl

                    Else

.Net DataGridView 導出到Execl

                        xlApp.Cells( 2   +  i, j  +   1 )  =   " ' "   &  Grid.Item(Arrary(j), i).Value.ToString

.Net DataGridView 導出到Execl

                    End If

.Net DataGridView 導出到Execl

                Next

.Net DataGridView 導出到Execl

            Next

.Net DataGridView 導出到Execl

            Dim mTable As DataTable  =  CType(Grid.DataSource, DataTable)

.Net DataGridView 導出到Execl

            Dim SumCount As Double  =  mTable.Compute( " sum( "   &  Grid.Columns(ColNum).Name  &   " ) " ,  "" )  '' 此處加合計

.Net DataGridView 導出到Execl

            ''  showProgressInfo(Grid) 

.Net DataGridView 導出到Execl
.Net DataGridView 導出到Execl

            With xlWorksheet

.Net DataGridView 導出到Execl

                .PageSetup.TopMargin  =   120   '' 距頂部的距離

.Net DataGridView 導出到Execl

                .Range(.Cells( 1 ,  1 ), .Cells(Rowindex  +   1 , Colindex)).Font.Size  =   13    '' 設定填充資料的字型大小

.Net DataGridView 導出到Execl

                .Range(.Cells( 1 ,  1 ), .Cells(Rowindex  +   1 , Colindex)).RowHeight  =   25    '' 設定行高

.Net DataGridView 導出到Execl

                .Range(.Cells( 1 ,  1 ), .Cells( 1 , Colindex)).HorizontalAlignment  =  Excel.XlVAlign.xlVAlignCenter  '' 設定标題對齊方式

.Net DataGridView 導出到Execl

                .Range(.Cells( 1 ,  1 ), .Cells( 1 , Colindex)).Select()

.Net DataGridView 導出到Execl

                .Range(.Cells( 1 ,  1 ), .Cells( 1 , Colindex)).Font.Name  =   " 黑體 "

.Net DataGridView 導出到Execl

                .Range(.Cells( 1 ,  1 ), .Cells( 1 , Colindex)).Font.Bold  =  True

.Net DataGridView 導出到Execl

                .Range(.Cells( 1 ,  1 ), .Cells(Rowindex  +   1 , Colindex)).Borders.LineStyle  =   1

.Net DataGridView 導出到Execl

                .Columns.EntireColumn.AutoFit()

.Net DataGridView 導出到Execl

                 ' .Range(.Cells(Rowindex + 7, 2), .Cells(Rowindex + 7, Colindex)).Merge(False)   '' 合并單元格

.Net DataGridView 導出到Execl

            End With

.Net DataGridView 導出到Execl
.Net DataGridView 導出到Execl

            With xlWorksheet.PageSetup

.Net DataGridView 導出到Execl

                .CenterHeader  =   " & "" 宋體,Bold "" &22 "   &   " 公司名稱 "   &  Chr( 10 )  &   " & "" 宋體,Bold "" &16 "   &   Chr( 10 ) 

.Net DataGridView 導出到Execl

                .LeftFooter  =   " 制表人: "   &   " _________________ "

.Net DataGridView 導出到Execl

                .CenterFooter  =   " 制表日期: "

.Net DataGridView 導出到Execl

                .RightFooter  =   " 第&P頁 共&N頁 "

.Net DataGridView 導出到Execl

            End With

.Net DataGridView 導出到Execl
.Net DataGridView 導出到Execl

            xlApp.Visible  =  True  

.Net DataGridView 導出到Execl

           '' If index  =   0  Then

.Net DataGridView 導出到Execl

            ''Else

.Net DataGridView 導出到Execl

            ''    xlWorksheet.PageSetup.Orientation  =  Excel.XlPageOrientation.xlLandscape  

.Net DataGridView 導出到Execl

            ''    xlApp.Worksheets.PrintPreview()    '' false  表示可直接顯示列印界面

.Net DataGridView 導出到Execl

            '' End If

.Net DataGridView 導出到Execl
.Net DataGridView 導出到Execl

        Catch ex As Exception

.Net DataGridView 導出到Execl

            MsgBox( " PrintOutStoreNumDetail: "   +  ex.ToString, MsgBoxStyle.Exclamation  +  MsgBoxStyle.OkOnly, Msg.CompanyName)

.Net DataGridView 導出到Execl

        End Try

.Net DataGridView 導出到Execl
.Net DataGridView 導出到Execl

    End Sub

 其中,Grid參數可換成其他類型,index=1可直接顯示Excel的列印界面.