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

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

思路很简单,写一个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:还会遇到其他新的问题,呵呵,这些都需要日后不断的积累经验吧)


  • 2
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 20
    评论
在C# WinForm中,可以使用DataGridView控件显示数据,并且可以将其中的数据导出Excel中。下面是导出当前页和全部数据的示例代码: 1. 导出当前页数据: ``` // 获取DataGridView中当前显示的数据 DataTable dt = new DataTable(); foreach (DataGridViewColumn column in dataGridView1.Columns) { dt.Columns.Add(column.HeaderText, column.ValueType); } foreach (DataGridViewRow row in dataGridView1.Rows) { DataRow dataRow = dt.NewRow(); foreach (DataGridViewCell cell in row.Cells) { dataRow[cell.ColumnIndex] = cell.Value; } dt.Rows.Add(dataRow); } // 导出数据Excel Excel.Application app = new Excel.Application(); Excel.Workbook workbook = app.Workbooks.Add(); Excel.Worksheet worksheet = workbook.Sheets[1]; for (int i = 0; i < dataGridView1.Columns.Count; i++) { worksheet.Cells[1, i + 1] = dataGridView1.Columns[i].HeaderText; } for (int i = 0; i < dataGridView1.Rows.Count; i++) { for (int j = 0; j < dataGridView1.Columns.Count; j++) { worksheet.Cells[i + 2, j + 1] = dataGridView1.Rows[i].Cells[j].Value.ToString(); } } workbook.SaveAs("data.xlsx"); app.Quit(); ``` 2. 导出全部数据: ``` // 获取DataGridView中全部数据 DataTable dt = new DataTable(); foreach (DataGridViewColumn column in dataGridView1.Columns) { dt.Columns.Add(column.HeaderText, column.ValueType); } foreach (DataGridViewRow row in dataGridView1.Rows) { DataRow dataRow = dt.NewRow(); foreach (DataGridViewCell cell in row.Cells) { dataRow[cell.ColumnIndex] = cell.Value; } dt.Rows.Add(dataRow); } // 导出数据Excel Excel.Application app = new Excel.Application(); Excel.Workbook workbook = app.Workbooks.Add(); Excel.Worksheet worksheet = workbook.Sheets[1]; for (int i = 0; i < dataGridView1.Columns.Count; i++) { worksheet.Cells[1, i + 1] = dataGridView1.Columns[i].HeaderText; } for (int i = 0; i < dt.Rows.Count; i++) { for (int j = 0; j < dt.Columns.Count; j++) { worksheet.Cells[i + 2, j + 1] = dt.Rows[i][j].ToString(); } } workbook.SaveAs("data.xlsx"); app.Quit(); ``` 需要注意的是,导出数据Excel需要引用Microsoft.Office.Interop.Excel命名空间,因此需要在项目中添加对该命名空间的引用。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值