asp.net c# gridview 导出到excel问题(高分)
导出到excel文件是,字段前面的0被去掉了,如“0000123”导出后变为“123”。查了很多说法,都实现不了,我把代码贴出来,大家给改一下行吗:
protected void Button6_Click(object sender, EventArgs e)
{
if (this.GridView2.Rows.Count == 0)
{
Response.Write("<script>alert('没有查找到数据,无法导出!')");
}
else
{
string style = @"<style> .text { mso-number-format:\@; } </script> ";
Response.Clear();
Response.Buffer = true;
Response.Charset = "GB2312";
Response.AppendHeader("Content-Disposition", "attachment;filename=FileName.xls");
// 如果设置为 GetEncoding("GB2312");导出的文件将会出现乱码!!!
Response.ContentEncoding = System.Text.Encoding.UTF7;
Response.ContentType = "application/ms-excel";//设置输出文件类型为excel文件。
System.IO.StringWriter oStringWriter = new System.IO.StringWriter();
System.Web.UI.HtmlTextWriter oHtmlTextWriter = new System.Web.UI.HtmlTextWriter(oStringWriter);
this.GridView2.DataBind();
this.GridView2.RenderControl(oHtmlTextWriter);
Response.Write(style);
Response.Output.Write(oStringWriter.ToString());
Response.Flush();
Response.End();
}
}
protected void GridView2_RowDataBound(object sender, GridViewRowEventArgs e)
{
if (e.Row.RowType == DataControlRowType.DataRow)
{
e.Row.Cells[0].Attributes.Add("class", "text");
e.Row.Cells[1].Attributes.Add("class", "text");
e.Row.Cells[2].Attributes.Add("class", "text");
e.Row.Cells[3].Attributes.Add("class", "text");
}
}
以上是我完全的代码,请高手指点一下啊! --------------------编程问答-------------------- 我也做过导出EXCEL,但我用的是第三方控件,很方便,导出什么格式都可以,
devexpress控件, --------------------编程问答-------------------- mark --------------------编程问答--------------------
string style = @" <style> .text { mso-number-format:\@; } </script> ";
看看<style></script>不对称阿,先改正看看。 --------------------编程问答-------------------- e.Item.Cells[0].Attributes.Add("style", "vnd.ms-excel.numberformat:@");
e.Item.Cells[1].Attributes.Add("style", "vnd.ms-excel.numberformat:@"); --------------------编程问答-------------------- <style> </script>不对称阿?怎么不对称啊,我是新手,帮着我改改啊 --------------------编程问答-------------------- 我做过这样的例子,但没有什么问题,你可以把我以前的实例下载下来看看。参照下是否可以 --------------------编程问答-------------------- 你这个是 WEBFORME 的? --------------------编程问答--------------------
这个控件能用于WINFORM 吗? --------------------编程问答-------------------- 按5楼的改了,不行,还是那样
6楼的,你的代码怎么下载啊?去哪里下载啊 --------------------编程问答-------------------- 这个问题很复杂吗? --------------------编程问答-------------------- 不怕麻烦的话可以一列一列的写出来,这样的话每列数据都可以处理. --------------------编程问答-------------------- 不怕麻烦,可以一列一列的写出来,就是我不知道该怎么写,给个代码吧 --------------------编程问答-------------------- 导出到excel的数据在前面加个" ' " 号就可以保留你的000了
--------------------编程问答-------------------- 不能用加" ' " 号的方法,因为导出的数据,别的系统需要引用的 --------------------编程问答-------------------- 我倒是 没有注意过 我试试我的代码,如果可以的话 代码全部传上来。 --------------------编程问答--------------------
你在别的系统引用取值的时候可以将" ' "去掉嘛 --------------------编程问答-------------------- 不好意思啊,别的系统格式是定死的,不能处理啊 --------------------编程问答-------------------- 不能加" ' "的话,只能在单元格的格式上下手了,设置格式为 文本
楼主狗下你这样的导出excel要怎么设置单元格格式吧... --------------------编程问答-------------------- 单元格的格式设置了,好像也不行啊 --------------------编程问答-------------------- 我着急啊,就没有解决办法吗 --------------------编程问答-------------------- 用其他办法也可以啊,我的GRIDVIEW是从ORACLE一个表中取出的数据,网上的例子大都是sqlserver的,谁有办法啊 --------------------编程问答--------------------
你确定你导出的excel的单元格格式设置成了文本,如果说设置成了文本就应该没有你说的问题了 --------------------编程问答-------------------- 打开excel模板,通过数据集赋值给单元格
sheet.Cells[i+4,"A"]="'"+""; --------------------编程问答-------------------- 设置单元格格式 --------------------编程问答-------------------- up --------------------编程问答-------------------- 如24#所说,设置单元格格式,需要对数据处理一下,例如<td style=\mso-number-format:\@; text-align:right;">00123</td>,你在头部的设置对单元格是无效的 --------------------编程问答-------------------- 不是高手,
用我用的试一下
.........
Response.Output.Write(oStringWriter.ToString());
Response.Write(style);
Response.Flush();
Response.End(); --------------------编程问答-------------------- 纯数字列到处excel默认当做数字类型导出,如果你想保留前面的0,设置该列为字符串格式即可。具体方法GOOGLE一下吧 --------------------编程问答-------------------- 导出到excel的数据在前面加个" ' " 号就可以保留你的000了
这个应该可以吧 --------------------编程问答-------------------- 你的编号是第几列?
e.Row.Cells[3].Attributes.Add("class", "text");
你的这些语句就是控制输出带O的.text 文本格式
--------------------编程问答-------------------- 加“‘” 方法应该可以啊,其他文件取数据的话,肯定也会当作文本取值的啊 --------------------编程问答-------------------- protected void Button1_Click(object sender, EventArgs e)
{
//调用方法导出到excel
Export("application/ms-excel", "FAE报表数据.xls");
//调用方法导出到word
Export("application/ms-word", "FAE报表数据.doc");
//隐藏用不到的列
GridView1.Columns[ColumnsName].Visible = false;
}
/// <summary>
///
/// </summary>
/// <param name="FileType">导出的文件类型(application/ms-excel)</param>
/// <param name="FileName">文件名称</param>
private void Export(string FileType, string FileName)
{
Response.Charset = "GB2312";
Response.ContentEncoding = System.Text.Encoding.UTF7;
Response.AppendHeader("Content-Disposition", "attachment;filename=" + HttpUtility.UrlEncode(FileName, Encoding.UTF8).ToString());
Response.ContentType = FileType;
this.EnableViewState = false;
StringWriter tw = new StringWriter();
HtmlTextWriter hw = new HtmlTextWriter(tw);
GridView1.RenderControl(hw);
Response.Write(tw.ToString());
Response.End();
}
/// <summary>
/// 导出Excel必须实现方法
/// </summary>
/// <param name="control"></param>
public override void VerifyRenderingInServerForm(Control control)
{
}
用户代码未处理 InvalidOperationException
只能在执行 Render() 的过程中调用 RegisterForEventValidation;
EnableEventValidation属性是 .NET Framework 2.0 中是新增的属性,默认的情况下该属性的值为true;通过这个新增的功能ASP.NET会检查 POST方法中的所带的参数,如果认为不合法,就会抛出异常。这个设计的目的是为了防止恶意用户利用post 方法发送一些恶意数据,但是有时也会出现类似上面的错误。
只要禁止这个功能,问题就能得到解决。可以通过以下两种途径解决:
1、在Web.Config文件中:在<system.web></system.web>标记中添加如下代码:
<system.web>
<pages enableEventValidation="false"> </pages>
</system.web>
2、在具体的.aspx页面的源代码中修改代码,如下:
<%@ Page Language="C#" EnableEventValidation="false" AutoEventWireup="true" CodeFile="GridView_Export_Excel.aspx.cs" Inherits="GridView_Export_Excel" %>
--------------------编程问答-------------------- 导出0000这类似的数字前面加个'就行
否则默认为数字 EXCEL会把0000去掉的 加个'默认为字符 --------------------编程问答-------------------- 唉 都是网上不负责的人误导啊
这句是错的
string style = @"<style> .text { mso-number-format:\@; } </script> ";
换成下面这句就可以了
string style = @"<style> .text { mso-number-format:\@; } </style> ";
--------------------编程问答-------------------- 设置单元格格式。excel把你那个当成数字来处理了。 --------------------编程问答-------------------- 你可以做成报表形式
。。。。。。。。。。。。。。。。。。
补充:.NET技术 , C#