1. 程式人生 > >DataGridView匯出資料到Excel及單元格格式的修改

DataGridView匯出資料到Excel及單元格格式的修改

       在軟體開發過程中,時常會遇到把一些資料資訊從DataGridView中匯出到Excel表格中的情況,如果寫的多了就會發現挺簡單的,我們不妨來寫一寫,留作備用,畢竟有時候Ctrl+C和Ctrl+V還是比較方便的。

思路很簡單,寫一個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:還會遇到其他新的問題,呵呵,這些都需要日後不斷的積累經驗吧)