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

ASP.NET
二级域名Cookie问题的解决方法
如何为asp.net网站项目添加子项目
asp.net用url重写URLReWriter实现任意二级域名
asp.net 序列化and反序列化演示
asp.net Timer的使用方法
AjaxControlToolKit DropDownExtender(下拉扩展控件)使用方法
AjaxControlToolKit CalendarExtender(日历扩展控件)的使用方法
让GridView只显示特定用户的数据的方法
让GridView只更新某些特定的数据的方法
ajaxControlToolkit中CascadingDropDown的用法说明
axp.net ScriptManager的简单用法
把程序集安装到全局程序集缓存中的步骤
引用全局程序集缓存内的程序集的方法
asp.net COOKIES需要注意的一点
asp.net UrlReWriter使用经验小结
页面导出为Excel的时间格式的问题
asp.net cookie清除的代码
Asp.net XMLHTTP封装类(GET,Post发送和接收数据)
ASP.NET XmlHttp跨域访问实现代码
Asp.NET 随机码生成基类(随机字母,随机数字,随机字母+数字)

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


出处:互联网   整理: 软晨网(RuanChen.com)   发布: 2009-09-23   浏览: 304 ::
收藏到网摘: 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");         
            }
        }
    }
}