背景:相信,我们大多数人对于DataGrid控件应该很熟悉。在使用VB做第一遍机房收费系统的时候,将DataGrid中的数据导出到Excel表中,是我们经常用到的一个功能。而现在的DataGridView,它可以取代先前版本中DataGrid控件,达到同样的效果。
在做机房时,将DataGridView中的数据导出到Excel表中,是经常用到的一个功能。在这里,我将从不同的方法来阐释,如何将DataGridView中的数据导出到Excel表中。
方法一、
这种方法,不需要我们添加任何服务引用,通过代码来达到“将DataGridView中的数据导出到Excel表中”的目的,简单粗暴!
<span style="font-family:KaiTi_GB2312;font-size:18px;"> Public Function ExportExcel(ByVal gvw As DataGridView) As Boolean '导出到Excel函数
Try
If gvw.Rows.Count <= 0 Then '判断记录数,如果没有记录就退出
MessageBox.Show("没有记录可以导出", "没有可以导出的项目", MessageBoxButtons.OK, MessageBoxIcon.Information)
Return False
Else '如果有记录就导出到Excel
Dim objCreateExcel As Object
Dim objAddExcel As Object
objCreateExcel = CreateObject("Excel.Application") '创建Excel对象
objAddExcel = objCreateExcel.workbooks.add()
Dim intTitle As Integer
Dim intRow As Integer
Dim intColumn As Integer '定义循环变量,行列变量
'把表头写入Excel
For intTitle = 0 To gvw.Columns.Count - 1
objAddExcel.worksheets(1).cells(1, intTitle + 1) = gvw.Columns(intTitle).HeaderCell.Value
Next
'用循环添加数据
For intRow = 0 To gvw.Rows.Count - 1 '行循环
For intColumn = 0 To gvw.Columns.Count - 1 '列循环
objAddExcel.worksheets(1).cells(intRow + 2, intColumn + 1) = gvw.Item(intColumn, intRow).Value.ToString
Next
Next
objAddExcel.worksheets(1).Cells.EntireColumn.AutoFit() '自动调整Excel列
objCreateExcel.visible = True '设置Excel可见作为Excel工作表名称
objAddExcel = Nothing '释放资源
objCreateExcel = Nothing '释放资源
End If
Return True
Catch ex As Exception '错误处理
MessageBox.Show(Err.Description.ToString, "错误", MessageBoxButtons.OK, MessageBoxIcon.Error) '出错提示
Return False
End Try
End Function</span>
使用时:
<span style="font-family:KaiTi_GB2312;font-size:18px;"> Private Sub btnLead_Click(sender As Object, e As EventArgs) Handles btnLead.Click
Call ExportExcel(DataGridView1)
End Sub</span>
方法二、
首先,我们要先添加一个模块(将DataGridView中的数据导出到Excel表中这个方法,经常用到。添加到模块中,以后用的时候,直接调用模块即可。)然后添加服务引用
下边是实现代码:
<span style="font-family:KaiTi_GB2312;font-size:18px;">'**********************************************
' 文 件 名:ImportToExcel
' 命名空间:UI
' 内 容:
' 功 能:将DataGridView中的数据导出到Excel表中
' 文件关系:
' 作 者:杨晨光
' 小 组:
' 生成日期:2014/8/22 14:27:54
' 版 本 号:V1.0.0.0
' 修改日志:
' 版权说明:
'*********************************************
Imports Microsoft.Office.Interop
Module ImportToExcel
Public Function ImportToExcel(ByVal gvw As DataGridView) As Boolean '导出到Excel函数
'建立Excel连接
Dim myExcel As New Microsoft.Office.Interop.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 gvw.ColumnCount - 1
myExcel.Cells(1, intTitle + 1) = gvw.Columns(intTitle).HeaderText
Next intTitle
'通过循环来添加控件中的数据到表格中
For intRow = 0 To gvw.RowCount - 1
For intColumn = 0 To gvw.ColumnCount - 1
'由于第一行是表头,所以添加数据时从第二行开始
myExcel.Cells(intRow + 2, intColumn + 1) = gvw(intColumn, intRow).Value.ToString
Next intColumn
Next intRow
Return True '添加完毕,返回true
End Function
End Module</span>
调用时
<span style="font-family:KaiTi_GB2312;font-size:18px;">Call ImportToExcel.ImportToExcel(DataGridView1)</span>
方法三、
在看同学的博客时,发现了“使用通过第三方控件”,也能到达我们想要的效果,而且,特别方便。她使用的是一个叫做“NPOI”的东西,详情,请点击《用NPOI将DataGridView中需要的列导出为Excel》
后期总结:
DataGridView它易于使用并高度可定制,支持很多我们的用户需要的特性。 相对于DataGrid控件,有了很大程度上的改进。
有时候,任何事情的解决并不是只有一种方法。我们完全可以换个角度、换种思维,去思考一下。在我们发现别的解决方案时,通过比较,就会认识到自身考虑事情的局限性。只有这样不断的思考,不断的比较,我们才能进步的更快。
记住:条条大路通罗马