当前位置: 首页 > 图文教程 > 网络编程 > ASP.NET > .net解决数据导出excel时的格式问题

ASP.NET
ASP.NET开发:简化应用程序的开发支持Web标准
asp.net XMLHttpRequest实现用户注册前的验证
asp.net 页面间传值方法小结
asp.net url重写浅谈
asp.net 验证码生成和刷新及验证
C#精髓 GridView72大绝技 学习gridview的朋友必看
实例说明asp.net中的简单角色权限控制
asp.net网站开发包wq.dll打包下载
js与ASP.NET 中文乱码问题
asp.net checkbox 动态绑定id GridView删除提示
asp.net TextBox回车触发事件 图片在img显示
asp.net 脏字典过滤问题 用正则表达式来过滤脏数据
asp.NET 脏字过滤算法
asp.NET 脏字过滤算法 修改版
asp.net sql 数据库处理函数命令
asp.net Javascript 的几种写法与提示
ASP.NET MVC学习笔记
asp.net 中国身份证号码验证代码 非正则
Asp.net中使用Sqlite数据库的方法
asp.net 中文字符串提交乱码的解决方法

ASP.NET 中的 .net解决数据导出excel时的格式问题


出处:互联网   整理: 软晨网(RuanChen.com)   发布: 2009-09-23   浏览: 345 ::
收藏到网摘: n/a

在项目中一般都需要将报表数据导出到EXCEL中,但经常出现导出长串数据(如身份证)到EXCEL中后显示为科学计数法的格式,或者报表中显示为001的数据导出到Excel后成了1的格式。

下面简单介绍一下以上问题的解决方法:

1、首先,了解一下excel从web页面上导出的原理。当我们把这些数据发送到客户端时,我们想让客户端程序(浏览器)以excel的格式读取它,所以把mime类型设为:application/vnd.ms-excel,当excel读取文件时会以每个cell的格式呈现数据,如果cell没有规定的格式,则excel会以默认的格式去呈现该cell的数据。这样就给我们提供了自定义数据格式的空间,当然我们必须使用excel支持的格式。下面就列出常用的一些格式:

1) 文本:vnd.ms-excel.numberformat:@

2) 日期:vnd.ms-excel.numberformat:yyyy/mm/dd

3) 数字:vnd.ms-excel.numberformat:#,##0.00

4) 货币:vnd.ms-excel.numberformat:¥#,##0.00

5) 百分比:vnd.ms-excel.numberformat: #0.00%

这些格式你也可以自定义,比如年月你可以定义为:yy-mm等等。那么知道了这些格式,怎么去把这些格式添加到cell中呢?下面以datagrid控件为例,介绍其格式化代码。

2、实例

前台代码

以下为引用的内容:
〈html xmlns="http://www.w3.org/1999/xhtml" >
〈head runat="server">
    〈title>导出数据到Excel〈/title>
〈/head>
〈body>
    〈form id="form1" runat="server">
    〈div>
   
        〈asp:DataGrid ID="DataGrid1" runat="server"
            onitemdatabound="DataGrid1_ItemDataBound" >
        〈/asp:DataGrid>
        〈asp:Button ID="Button1" runat="server" onclick="Button1_Click" Text="导出数据到Excel" />
   
    〈/div>
    〈/form>
〈/body>
〈/html>


 后台代码

以下为引用的内容:
using System;
using System.Collections;
using System.Configuration;
using System.Data;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.HtmlControls;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;

 

namespace FLX.ComplexQuery
{
    public partial class OutPutExcel : System.Web.UI.Page
    {
        protected void Page_Load(object sender, EventArgs e)
        {
            DataGrid1.DataSource = CreateDataSource();
            DataGrid1.DataBind();
        }

        protected void Button1_Click(object sender, EventArgs e)
        {
            Response.Clear();
            Response.Buffer = true;
            Response.Charset = "GB2312";
            Response.AppendHeader("Content-Disposition", "attachment;filename=FileName.xls");
            Response.ContentEncoding = System.Text.Encoding.GetEncoding("GB2312");//设置输出流为简体中文
            Response.ContentType = "application/ms-excel";//设置输出文件类型为excel文件。
            this.EnableViewState = false;
            System.Globalization.CultureInfo myCItrad = new System.Globalization.CultureInfo("ZH-CN", true);
            System.IO.StringWriter oStringWriter = new System.IO.StringWriter(myCItrad);
            System.Web.UI.HtmlTextWriter oHtmlTextWriter = new System.Web.UI.HtmlTextWriter(oStringWriter);
            this.DataGrid1.RenderControl(oHtmlTextWriter);
            Response.Write(oStringWriter.ToString());
            Response.End();
        }

        ICollection CreateDataSource()
        {

            DataTable dt = new DataTable();
            DataRow dr;
            dt.Columns.Add(new DataColumn("身份证号码", typeof(string)));
            dt.Columns.Add(new DataColumn("图书单价", typeof(decimal)));
            dt.Columns.Add(new DataColumn("购买数量", typeof(Int32)));
            dt.Columns.Add(new DataColumn("总价格", typeof(decimal)));
            for (int i = 0; i 〈 30; i++)
            {
                dr = dt.NewRow();

                dr[0] = "123456789123456789";
                dr[1] = 100 * i / 3.0;
                dr[2] = i + 5;
                dr[3] = (decimal)dr[1] * (Int32)dr[2];
                dt.Rows.Add(dr);
            }
            DataView dv = new DataView(dt);
            return dv;
        }

        protected void DataGrid1_ItemDataBound(object sender, DataGridItemEventArgs e)
        {
            if (e.Item.ItemType == ListItemType.Item || e.Item.ItemType == ListItemType.AlternatingItem)
            {
                //将整个datagrid都格式化为文本格式
                int datagridcolumns; //datagrid显示列的数量,
                //获取显示列的数量可以从数据源那里进行获取
                //比如绑定DataGrid的数据源是DataSet                  
                //datagrid显示列的数量 = ds.tables[0].Columns.Count; 
                for (int i = 0; i 〈 datagridcolumns; i++)
                {
                    e.Item.Cells[i].Attributes.Add("style", "vnd.ms-excel.numberformat:@");
                }

                //对需要格式化的列进行格式化
                //e.Item.Cells[0].Attributes.Add("style", "vnd.ms-excel.numberformat:@");
                //e.Item.Cells[2].Attributes.Add("style", "vnd.ms-excel.numberformat::#,##0.00");
               // e.Item.Cells[3].Attributes.Add("style", "vnd.ms-excel.numberformat:¥#,###.00");         
            }
        }
    }
}