这一次和第一次机房收费系统导出Excel表格没有什么区别,挺类似的。唯一不同的是第一次机房收费系统的时候,凡是有导出Excel表功能的窗体我都写上了一段导出Excel表的代码。这次我没有那么的“勤奋”啊!
敲了两个带有导出Excel表的窗体以后,我发现这段代码是一模一样啊!下面请看导出Excel表的代码!
Private Sub btnExcel_Click(sender As Object, e As EventArgs) Handles btnExcel.Click Dim myExcel As New Microsoft.Office.Interop.Excel.Application '建立Excel连接 myExcel.Application.Workbooks.Add(True) '新建一个Excel文件 myExcel.Visible = True '让Excel表可见 Dim i, j, k As Integer '定义变量 For k = 0 To MyGridView.ColumnCount - 1 '添加表头, 因为Excel表从第一行第一列开始,而MyGridView从第0行第0列开始,所以需要加1 myExcel.Cells(1, k + 1) = MyGridView.Columns(k).HeaderText Next For i = 0 To MyGridView.RowCount - 1 '通过循环来添加控件中的数据到Excel表中 For j = 0 To MyGridView.ColumnCount - 1 '由于第一行是表头,所以添加数据从第二行开始。 myExcel.Cells(i + 2, j + 1) = MyGridView(j, i).Value '因为Excel表从第一行第一列开始,而MyGridView从第0行第0列开始,所以需要加1 Next Next End Sub
每次写的都是上面同一段代码!跟复制粘贴一样。
所以我就想既然一样,那就封装起来。把它添加到公共模块里面直接调用,这就简单多了。所以我第二次的代码诞生了!
先在U层添加一个公共模块,如图:
在模块里面写这样一段代码:
Public Function ExportExcel(ByVal dgv As DataGridView) As Boolean Dim myExcel As New Microsoft.Office.Interop.Excel.Application '建立Excel连接 myExcel.Application.Workbooks.Add(True) '新建一个Excel文件 myExcel.Visible = True '让Excel表可见 Dim i, j, k As Integer '定义变量 For k = 0 To dgv.ColumnCount - 1 '添加表头, 因为Excel表从第一行第一列开始,而MyGridView从第0行第0列开始,所以需要加1 myExcel.Cells(1, k + 1) = dgv.Columns(k).HeaderText Next For i = 0 To dgv.RowCount - 1 '通过循环来添加控件中的数据到Excel表中 For j = 0 To dgv.ColumnCount - 1 '由于第一行是表头,所以添加数据从第二行开始。 myExcel.Cells(i + 2, j + 1) = dgv(j, i).Value '因为Excel表从第一行第一列开始,而MyGridView从第0行第0列开始,所以需要加1 Next Next Return True End Function在 U 层的窗体代码中只调用一下就行了!代码如下:
Private Sub btnExcel_Click(sender As Object, e As EventArgs) Handles btnExcel.Click Call ExportExcel(MyGridView) '调用模块中的ExportExcel()函数,来导出Excel表 End Sub
这样就简单多了。在别的窗体里面再用到,就直接调用,一句话搞定!
虽然挺简单的,但是不想可能还是傻乎乎的复制,粘贴呢,我们编写程序的时候,遇到能够复制粘贴的代码,就代表代码冗余了,肯定会有简单的方法等着我们去发现!