• DataGridView导出数据到Excel及单元格格式的改动


           在软件开发过程中,时常会遇到把一些数据信息从DataGridView中导出到Excel表格中的情况。假设写的多了就会发现挺简单的,我们最好还是来写一写,留作备用,毕竟有时候Ctrl+C和Ctrl+V还是比較方便的。

    思路非常easy。写一个Module,然后调用:

    Module代码例如以下:

    <span style="font-family:Times New Roman;font-size:18px;">'**********************************************
    ' 文  件  名:LeadToExcel
    ' 命名空间:UI
    ' 功       能:将DataGridView中的数据导出到Excel表中 
    ' 作       者:郝贵宝
    ' 生成日期:2014/8/23 10:55:54
    ' 版  本  号:V1.0.0.0
    ' 改动日志:
    ' 版权说明:
    '***********************************************
    Imports Microsoft.Office.Interop          '加入对Office的引用
    Module LeadToExcel
        Function LeadToExcel(ByVal dgv As DataGridView) As Boolean    '导出为Excel函数
            '建立Excel连接
            Dim myExcel As New 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 dgv.ColumnCount - 1
                myExcel.Cells(1, intTitle + 1) = dgv.Columns(intTitle).HeaderText
            Next intTitle
    
            '通过循环来加入控件中的数据到表格中
            For intRow = 0 To dgv.RowCount - 1
                For intColumn = 0 To dgv.ColumnCount - 1
                    '因为第一行是表头,所以加入数据时:
                    'Excel中从第二行,第一列(2,1)開始赋值。
                    'DataGridView从第一行,第一列(0。0)開始赋值(index 从0,0開始)
                    myExcel.Cells(intRow + 2, intColumn + 1) = dgv(intColumn, intRow).Value.ToString
                Next intColumn
            Next intRow
    
            Return True     '加入完成,返回true
        End Function
    
    End Module</span>

    点击button调用

    <span style="font-family:Times New Roman;font-size:18px;">    Private Sub btnLeadExcel_Click(sender As Object, e As EventArgs) Handles btnLeadExcel.Click
            Call LeadToExcel.LeadToExcel(DataGridView1)
        End Sub</span>

            O(∩_∩)O~大致上就是这样了,可是仍有一些细节须要注意

    问题缘由:假设你在DataGridView中显示的有数字,且数字以0开头,则导出Excel后0消失了。(比方某卡号为001,导出后显示为1)

           

            假设细致想想就会明确。Excel中数字的格式默觉得常规(常规单元格格式不包括不论什么特定的数字格式),所以数字前面的 0 会被去掉。

    解决方式:在LeadToExcel模块中,赋值时在数据前加上" ’ "  变为文本格式就可以,例如以下:

    <span style="font-family:Times New Roman;font-size:18px;">        '通过循环来加入控件中的数据到表格中
            For intRow = 0 To dgv.RowCount - 1
                For intColumn = 0 To dgv.ColumnCount - 1
                    '因为第一行是表头。所以加入数据时:
                    'Excel中从第二行,第一列(2。1)開始赋值。
                    'DataGridView从第一行。第一列(0。0)開始赋值(index 从0,0開始)
                    myExcel.Cells(intRow + 2, intColumn + 1) = "'" + dgv(intColumn, intRow).Value.ToString
                Next intColumn
            Next intRow</span>
            
    解决方式再思考:依照上述方法,会把全部的单元格都变成了文本格式,并不一定满足全部情况,于是,须要找到数据所在列了。仅仅在这一列内容的前面加“ ’ ” 即可了。


    举一反三:日期。时间,货币的格式转换都能够依照这个思路来解决。


    再领悟:假设当初在设计数据库或写实体时就能考虑到这些情况,而做出适当改变,也许后面的这些问题就不会产生了。(ps:还会遇到其它新的问题,呵呵,这些都须要日后不断的积累经验吧)


  • 相关阅读:
    拉格朗日乘数法
    凸优化
    2018-2-13-安装visualStudio-出现-cant-install-Microsoft.TeamFoundation.OfficeIntegration.Resources...
    2019-11-9-win10-支持默认把触摸提升-Pointer-消息
    2019-7-1-Roslyn-让编译时候-Message-内容默认输出
    2019-8-31-win2d-通过-CanvasActiveLayer-画出透明度和裁剪
    2019-10-4-C#-极限压缩-dotnet-core-控制台发布文件
    2019-8-31-dotnet-获取指定进程的输入命令行
    2019-8-30-PowerShell-通过-WMI-获取系统安装的驱动
    2018-8-10-VisualStudio-2017-项目格式-自动生成版本号
  • 原文地址:https://www.cnblogs.com/slgkaifa/p/7093814.html
Copyright © 2020-2023  润新知