在项目中一般都需要将报表数据导出到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 = ; i < ; i++)
{
dr = dt.NewRow(); dr[] = "";
dr[] = * i / 3.0;
dr[] = i + ;
dr[] = (decimal)dr[] * (Int32)dr[];
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 = ; 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");
}
}
}
}

后台

3、动态绑定数据源示例

 //导出
function GetExcel() {
var model = {};
model.CompanyName = mini.get("CompanyName").getValue();
model.DateFrom = mini.get("DateFrom").getValue();
model.DateTo = mini.get("DateTo").getValue();
var json = mini.encode(model);
window.open("EntReport/SoftwareRP/Export?model=" + json);
}

前台js方法

       /// <summary>
/// 导出Excel
/// </summary>
/// <param name="model"></param>
public void Export(string model)
{
DataTable table = new DataTable();
Dictionary<string, string> dic = new Dictionary<string, string>();
JavaScriptSerializer js = new JavaScriptSerializer();
dic = js.Deserialize<Dictionary<string, string>>(model);
System.Data.DataSet ds = new ZhishiPatent_BLL().QueryDataSet(dic);
table = ds.Tables[]; Response.Clear();
Response.Buffer = true;
Response.Charset = "GB2312";//UTF-8
Response.AppendHeader("Content-Disposition", "attachment;filename=" + "知识专利统计.xls");
Response.ContentEncoding = System.Text.Encoding.GetEncoding("GB2312");
Response.ContentType = "application/ms-excel";
Response.Write(ImportToExcel(table));
Response.End();
}
/// <summary>
/// 设置样式
/// </summary>
/// <param name="table"></param>
/// <returns></returns>
private string ImportToExcel(DataTable table)
{
System.Text.StringBuilder sb = new System.Text.StringBuilder();
DataGrid gv = new DataGrid();
gv.ItemDataBound += new DataGridItemEventHandler(gv_ItemDataBound);
gv.AlternatingItemStyle.BackColor = System.Drawing.Color.White;
gv.AlternatingItemStyle.ForeColor = System.Drawing.Color.FromArgb(, , );
gv.HeaderStyle.BackColor = System.Drawing.Color.FromArgb(, , );
gv.HeaderStyle.Font.Bold = true;
gv.HeaderStyle.ForeColor = System.Drawing.Color.White;
gv.HeaderStyle.VerticalAlign = VerticalAlign.Middle;
gv.HeaderStyle.HorizontalAlign = HorizontalAlign.Center;
gv.ItemStyle.BackColor = System.Drawing.Color.FromArgb(, , );
gv.ItemStyle.ForeColor = System.Drawing.Color.FromArgb(, , );
gv.DataSource = table;
gv.DataBind();
System.IO.StringWriter oStringWriter = new System.IO.StringWriter(new System.Globalization.CultureInfo("zh-CN"));
System.Web.UI.HtmlTextWriter ht = new System.Web.UI.HtmlTextWriter(oStringWriter);
gv.RenderControl(ht);
return oStringWriter.ToString();
} private void gv_ItemDataBound(object sender, DataGridItemEventArgs e)
{
if (e.Item.ItemType == ListItemType.Item || e.Item.ItemType == ListItemType.AlternatingItem)
{
foreach (TableCell item in e.Item.Cells)
{
item.Attributes.Add("style", "vnd.ms-excel.numberformat: @"); }
e.Item.Cells[].HorizontalAlign = HorizontalAlign.Right;
} }

后台

.net解决数据导出excel时的格式问题的更多相关文章

  1. Gridview数据导出excel时身份证号码为科学计数法的解决方法

    if (e.Row.RowType == DataControlRowType.DataRow) { string id = this.GridView1.DataKeys[e.Row.RowInde ...

  2. C#将网页数据导出Excel时编码设置

    public void DGToExcel() { Response.ClearContent(); Response.Charset = "GB2312";//内容编码 Resp ...

  3. PHP导出excel时数字变为科学计数的解决方法

    在数据导出到excel时数字格式不对,一般分为以下两种情况. 1.excel单元格设置长度不够 解决方法: //在excel.php文件中 $objActSheet = $objPHPExcel-&g ...

  4. 将页面中表格数据导出excel格式的文件(vue)

    近期由于项目需要,需要将页面中的表格数据导出excel格式的文件,折腾了许久,在网上各种百度,虽然资料不少,但是大都不全,踩了许多坑,总算是皇天不负有心人,最后圆满解决了. 1.安装相关依赖(npm安 ...

  5. 用POI导出excel时,较长的数字不想被自动变为科学计数法的解决方式(转)

    做过很多次导出excel了.都碰到一个问题,内容里如果包含一个比较长的数字,比如订单号“2546541656596”,excel会自动变成科学计数法... 弄过好几次都没有解决,最近又要导出excel ...

  6. Microsoft Dynamics CRM 解决数据大于5000时,页面上只能导出5000+数据。

    页面显示: update [MSCRM_CONFIG].[dbo].[DeploymentProperties] set IntColumn=10000 --调整成10000+   页面导出: 一.在 ...

  7. java解决poi导出excel文字水印,导出excel不可操作问题

    首先需求是用户提出导出excel数据需使用水印备注其用途: 其实就是在导出excel的同时带有自定义文字水印的导出. 那么我们首先想到的肯定是以一个什么样的思路去解决该问题,首先查找poi导出exce ...

  8. Java使用POI实现数据导出excel报表

    Java使用POI实现数据导出excel报表 在上篇文章中,我们简单介绍了java读取word,excel和pdf文档内容 ,但在实际开发中,我们用到最多的是把数据库中数据导出excel报表形式.不仅 ...

  9. 解决C#导出excel异常来自 HRESULT:0x800A03EC的方法 .

    解决C#导出excel异常来自 HRESULT:0x800A03EC的方法 .   xlBook.SaveAs(FilePath,Microsoft.Office.Interop.Excel.XlFi ...

随机推荐

  1. [问题2014A09] 复旦高等代数 I(14级)每周一题(第十一教学周)

    [问题2014A09]  设 \(A,B\) 分别是 \(3\times 2\), \(2\times 3\) 矩阵且满足\[AB=\begin{bmatrix} 8 & 2 & -2 ...

  2. WINDOWS Composer & PHPUnit 安装记录

    Windows: 安装Composer: 下载了composer_setup.exe 运行之后提示和Xdebug冲突,在php.ini中注释掉php_xdebug.dll,再次运行.通过 compos ...

  3. parseInt的源码阅读

    parseInt的源码阅读 Integer.parseInt()这个方法的功能小巧又实用,实现起来困难不大,没有很复杂.这里就来看一下Java的源码是怎么写的吧,走一边大婶写过的代码,应该会有点收获吧 ...

  4. linux 双网卡实现

    linux实现双网卡,在虚拟机中创建一个新网卡,NAT方式连接,其中eth0设置为连接外网,目前eth0为自动分配状态,所以将代码注释掉了,eth1设置为连接内网.

  5. centos7 gradle

    cd /usr/local wget https://downloads.gradle.org/distributions/gradle-2.13-bin.zip unzip gradle-2.13- ...

  6. 关于js执行顺序

    http://www.cnblogs.com/sanshi/archive/2011/02/28/1967367.html http://mtnt2008.iteye.com/blog/701981 ...

  7. 《BI项目笔记》创建标准维度、维度自定义层次结构

  8. TCP/IP知识点汇总

    1.HUB.Switch.Router在OSI模型中分别是第几层设备,各层的名称是什么? 2.TCP/IP 协议栈及 OSI 参考模型详解

  9. (七)HTTP协议

    HTTP协议报文基本格式 HTTP协议报文基本格式       HTTP协议(Hypertext Transfer Protocol――超文本传输协议),浏览器端(客户端)向WEB服务器端访问页面的过 ...

  10. 分部类(partial)

    一般来说,一个类.结构或接口位于一个源文件中,但某些情况,比如大型项目.特殊部署时,可能需要把一个类.结构或接口放在几个文件中来处理.等到编译时,自动把它们合起来,这就得应用 C# 分部类了. C# ...