DataGridView匯出資料到Excel及單元格格式的修改
阿新 • • 發佈:2019-01-10
在軟體開發過程中,時常會遇到把一些資料資訊從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:還會遇到其他新的問題,呵呵,這些都需要日後不斷的積累經驗吧)