首页 > 代码库 > 两种方法DatagridView轻松导入到Excel

两种方法DatagridView轻松导入到Excel

                众所周知,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
              

             虽然和第一次做收费系统相比简单了很多,但这个功能由于存在着普遍性和良好的通用性,还是需要我们认真对待。如何做到最大化的方便用户使用才是我们的最终目标。