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

ASP.NET
Asp.net 时间操作基类(支持短日期,长日期,时间差)
asp.net 获取机器硬件信息(cpu频率、磁盘可用空间、内存容量等)
asp.net 数据库备份还原(sqlserver+access)
Asp.Net 数据操作类(附通用数据基类)
Asp.net 弹出对话框基类(输出alet警告框)
Asp.net 文件上传类(取得文件后缀名,保存文件,加入文字水印)
Asp.net Socket客户端(远程发送和接收数据)
Asp.net 字符串操作基类(安全,替换,分解等)
Asp.Net数据输出到EXCEL表格中
asp.net Gridview里添加汇总行
asp.net UpdatePanel的简单用法
asp.net ajaxControlToolkit FilteredTextBoxExtender的简单用法
this connector is disabled错误的解决方法
sql事务应用积累
asp.net Page.Controls对象(找到所有服务器控件)
在asp.NET中字符串替换的五种方法
ASP.NET缓存方法分析和实践示例代码
asp.net 在DNN模块开发中遇到的resx怪问题
ASP.NET State service状态服务的问题解决方法
asp.net 结合mysql存储过程进行分页代码

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


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