机房重构之导出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</span>  


使用时:

  Private Sub btnLead_Click(sender As Object, e As EventArgs) Handles btnLead.Click  
        Call ExportExcel(DataGridView1)  
    End Sub

方法二
首先,我们要先添加一个模块(将DataGridView中的数据导出到Excel表中这个方法,经常用到。添加到模块中,以后用的时候,直接调用模块即可。)然后添加服务引用 ,添加引用的时候如果找不到图片里的引用,还可以用代码来添加
这里写图片描述

代码添加引用

Imports Microsoft.Office.Interop

实现代码

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>  

调用时

Call ImportToExcel.ImportToExcel(DataGridView1) 

方法三
用NPOI将DataGridView中需要的列导出为Excel
一.首先从网上下载NPOI.dll。
二. 在U层添加引用,添加NPOI.dll文件。或直接将文件放到U层的bin\Debug文件夹下。
三. 接下来,就是代码部分。

Imports NPOI.HSSF.UserModel 'HSSF是Microsoft Excel 97-2003 格式读写库  
Imports NPOI.SS.UserModel   'Excel公用接口及Excel公式计算引擎  
Imports System.IO           '提供允许读写文件和数据流的类  
Public Class ExportExcel  
    ''' <summary>  
    ''' 导出为Excel  
    ''' </summary>  
    ''' <param name="dgv"></param>参数为DataGridView  
    ''' <remarks></remarks>  
    Public Shared Sub ExportExcel(ByVal dgv As System.Windows.Forms.DataGridView)  
        Dim workbook As New HSSFWorkbook    '工作簿  
        Dim sheet As HSSFSheet              '工作表  
        Dim excelrow As HSSFRow             '行集  

        Dim i As Integer                    '列的循环变量  
        Dim m As Integer                    '行的循环变量  
        Dim n As Integer                    '列的循环变量  

        Dim saveDialog As Windows.Forms.SaveFileDialog     '保存文件的对话框  

        Dim ms As MemoryStream                             '内存中的数据流  
        Dim fs As FileStream                               '文件流  
        Dim filename As String                             '保存时的文件名称  

        '如果DataGridView中没有数据,则不导出Excel  
        If dgv.Rows.Count = 0 Then  
            MsgBox("无法导出为Excel!", MsgBoxStyle.Exclamation, "温馨提示")  
            Return  
        End If  

        sheet = workbook.CreateSheet                      '在工作簿中创建表  
        excelrow = sheet.CreateRow(0)                     '在工作表中创建标题行Row(0)  

        '添加每列列标题  
        For i = 0 To dgv.Columns.Count - 1  
            '将可见的列的标题写到单元格中(如果某列不可见,那么会在导出的Excel中空出这列)  
            If dgv.Columns(i).Visible = True Then  
                excelrow.CreateCell(i).SetCellValue(dgv.Columns(i).HeaderText)  
            End If  
        Next  
        '添加其他行和列  
        For m = 1 To dgv.Rows.Count  
            excelrow = sheet.CreateRow(m)                  '每遍历一行,则在sheet中创建一行  
            For n = 0 To dgv.Columns.Count - 1             '遍历每一行中的所有列  
                '如果该列可见,则导出该列单元格的值  
                If dgv.Columns(n).Visible = True Then  
                    excelrow.CreateCell(n).SetCellValue(dgv.Rows(m - 1).Cells(n).Value.ToString)  
                End If  
                '如果该列不可见,则将该列设置为隐藏  
                If dgv.Columns(n).Visible = False Then  
                    sheet.SetColumnHidden(n, True)  
                End If  
            Next  
        Next      
        saveDialog = New Windows.Forms.SaveFileDialog                '保存文件对话框  
        saveDialog.DefaultExt = "xls"                                '设置默认文件扩展名  
        saveDialog.Filter = "Excel文件|*.xls"                        '文件类型  
        saveDialog.ShowDialog()                                      '弹出保存文件对话框  

        filename = saveDialog.FileName                               '将对话框中输入的文件名赋给filename  
        ms = New MemoryStream()  
        fs = New FileStream(filename, FileMode.Create)  
        workbook.Write(ms)                                           '写入数据   
        workbook.Write(fs)  
        fs.Close()                                                   '关闭文件  
        workbook = Nothing  
        ms.Close()  
        ms.Dispose()  
    End Sub  

End Class  


     调用:
    Private Sub btnExportExcel_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnExportExcel.Click  
        '当DataGridView中有记录时  
        If dtgrdRecord.Columns.Count <> 0 Then  
            '设置不可见的列  
            dtgrdRecord.Columns(4).Visible = False  
        End If  
        ExportExcel.ExportExcel(dtgrdRecord)  
    End Sub  

有时候,任何事情的解决并不是只有一种方法.多多的探索,能开阔我们的视野。
总有一种方法适合你
小助手:DataGridView控件使用大全

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 24
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 24
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值