1. 程式人生 > >DataGridView導出數據到Excel及單元格格式的改動

DataGridView導出數據到Excel及單元格格式的改動

找到 popu 過程 卡號 文本 控件 什麽 ng- csdn

在軟件開發過程中,時常會遇到把一些數據信息從DataGridView中導出到Excel表格中的情況。假設寫的多了就會發現挺簡單的,我們最好還是來寫一寫,留作備用,畢竟有時候Ctrl+C和Ctrl+V還是比較方便的。

思路非常easy。寫一個Module,然後調用:

Module代碼例如以下:

<span style="font-family:Times New Roman;font-size:18px;">‘**********************************************
‘ 文  件  名:LeadToExcel
‘ 命名空間:UI
‘ 功       能:將DataGridView中的數據導出到Excel表中 
‘ 作       者:郝貴寶
‘ 生成日期:2014/8/23 10:55:54
‘ 版  本  號:V1.0.0.0
‘ 改動日誌:
‘ 版權說明:
‘***********************************************
Imports Microsoft.Office.Interop          ‘加入對Office的引用
Module LeadToExcel
    Function LeadToExcel(ByVal dgv As DataGridView) As Boolean    ‘導出為Excel函數
        ‘建立Excel連接
        Dim myExcel As New Excel.Application()
        myExcel.Application.Workbooks.Add(True)
        myExcel.Visible = True

        ‘定義循環變量,行,列變量
        Dim intRow As Integer
        Dim intColumn As Integer
        Dim intTitle As Integer
        ‘加入表頭
        For intTitle = 0 To dgv.ColumnCount - 1
            myExcel.Cells(1, intTitle + 1) = dgv.Columns(intTitle).HeaderText
        Next intTitle

        ‘通過循環來加入控件中的數據到表格中
        For intRow = 0 To dgv.RowCount - 1
            For intColumn = 0 To dgv.ColumnCount - 1
                ‘因為第一行是表頭,所以加入數據時:
                ‘Excel中從第二行,第一列(2,1)開始賦值。
                ‘DataGridView從第一行,第一列(0。0)開始賦值(index 從0,0開始)
                myExcel.Cells(intRow + 2, intColumn + 1) = dgv(intColumn, intRow).Value.ToString
            Next intColumn
        Next intRow

        Return True     ‘加入完成,返回true
    End Function

End Module</span>

點擊button調用

<span style="font-family:Times New Roman;font-size:18px;">    Private Sub btnLeadExcel_Click(sender As Object, e As EventArgs) Handles btnLeadExcel.Click
        Call LeadToExcel.LeadToExcel(DataGridView1)
    End Sub</span>

O(∩_∩)O~大致上就是這樣了,可是仍有一些細節須要註意

問題緣由:假設你在DataGridView中顯示的有數字,且數字以0開頭,則導出Excel後0消失了。(比方某卡號為001,導出後顯示為1)

技術分享

假設細致想想就會明確。Excel中數字的格式默覺得常規(常規單元格格式不包括不論什麽特定的數字格式),所以數字前面的 0 會被去掉。

解決方式:在LeadToExcel模塊中,賦值時在數據前加上" " 變為文本格式就可以,例如以下:

<span style="font-family:Times New Roman;font-size:18px;">        ‘通過循環來加入控件中的數據到表格中
        For intRow = 0 To dgv.RowCount - 1
            For intColumn = 0 To dgv.ColumnCount - 1
                ‘因為第一行是表頭。所以加入數據時:
                ‘Excel中從第二行,第一列(2。1)開始賦值。
                ‘DataGridView從第一行。第一列(0。0)開始賦值(index 從0,0開始)
                myExcel.Cells(intRow + 2, intColumn + 1) = "‘" + dgv(intColumn, intRow).Value.ToString
            Next intColumn
        Next intRow</span>
技術分享
解決方式再思考:依照上述方法,會把全部的單元格都變成了文本格式,並不一定滿足全部情況,於是,須要找到數據所在列了。僅僅在這一列內容的前面加“ ” 即可了。


舉一反三:日期。時間,貨幣的格式轉換都能夠依照這個思路來解決。


再領悟:假設當初在設計數據庫或寫實體時就能考慮到這些情況,而做出適當改變,也許後面的這些問題就不會產生了。(ps:還會遇到其它新的問題,呵呵,這些都須要日後不斷的積累經驗吧)


DataGridView導出數據到Excel及單元格格式的改動