众所周知,DatagridView控件来处理表各类数据真的是“简单、方便、疗效快”,因此备受广大民众喜爱。今天我们再来继续探讨一下有关它和Excel的“姊妹情深”。
几乎没有人不对Excel不了解,但要说熟悉和认识透彻恐怕我们还远远没有做到(这是题外之言),重点还是Excel的强大数据处理能力带给我们的便利,所以把DatagridView数据表变为老少皆宜的Excel表格就显得尤为重要了。
其实这一转换也很简单,下面就为大家介绍下两种方法,轻松连接“姊妹情”。
方法一:
这种方法不需要任何加载和引用,只是纯代码,执行效率比较高。
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
方法二:需要引用.NET FrameWork程序集下的Office,但代码较少,具体如下:
1、添加引用(如图)
然后选择
2、代码
Imports Microsoft ‘添加引用
Module mdlText
Public Function ExportExcel(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
EndModule
虽然和第一次做收费系统相比简单了很多,但这个功能由于存在着普遍性和良好的通用性,还是需要我们认真对待。如何做到最大化的方便用户使用才是我们的最终目标。