机房收费系统中有一个功能是把DataGridView导出为Excel。其实中难,正所谓“难者不会,会者不难”,下面就进行一下简要介绍。
形象起见,先看图:
一、添加引用
二、代码实现(DataGridView控件在此处命名为:dgvInfo)
'1.实例化工作簿 Dim MyExcel As New Microsoft.Office.Interop.Excel.Application() '2.添加表 MyExcel.Application.Workbooks.Add() '3.打开表 MyExcel.Visible = True '4.导出数据 ' 1)获取datagridview的标题行赋给Excel,Excel标题行第一列标识为1,datagridview则为0,所以为Cols-1 Dim Cols As Integer For Cols = 1 To dgvInfo.Columns.Count MyExcel.Cells(1, Cols) = dgvInfo.Columns(Cols - 1).HeaderText Next ' 2)往excel表里添加数据() Dim intRow As Integer For intRow = 0 To dgvInfo.RowCount - 1 Dim intColumn As Integer For intColumn = 0 To dgvInfo.ColumnCount - 1 If Me.dgvInfo(intColumn, intRow).Value Is System.DBNull.Value Then MyExcel.Cells(intRow + 2, intColumn + 1) = "" 'Excel的第一行是标题,所以应从第二行开始,即:intRow+2 注意DataGridView的坐标是先列后行 Else MyExcel.Cells(intRow + 2, intColumn + 1) = dgvInfo(intColumn, intRow).Value.ToString End If Next intColumn Next intRow
注意
1.DBNull 类表示一个不存在的值。例如,在数据库的表中,某一行的某列中可能不包含任何数据。即,该列被视为根本不存在,而不只是没有值。一个表示不存在的列的 DBNull 对象。
2.字符中以“0”开头的显示问题。看下图,其中程序中显示卡号的是“01”,而到了Excel中却变成了“0”,何故?在做第一遍机房收费系统时曾遇见过类似问题,请看博客《MSHFlexGrid中的数据导出为Excel》
程序中如下:
Excel中如下: