当前位置:编程学习 > C#/ASP.NET >>

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 的? --------------------编程问答--------------------
引用 1 楼 zwm520lj 的回复:
我也做过导出EXCEL,但我用的是第三方控件,很方便,导出什么格式都可以,
 devexpress控件,


这个控件能用于WINFORM 吗? --------------------编程问答-------------------- 按5楼的改了,不行,还是那样
6楼的,你的代码怎么下载啊?去哪里下载啊 --------------------编程问答-------------------- 这个问题很复杂吗? --------------------编程问答-------------------- 不怕麻烦的话可以一列一列的写出来,这样的话每列数据都可以处理. --------------------编程问答-------------------- 不怕麻烦,可以一列一列的写出来,就是我不知道该怎么写,给个代码吧 --------------------编程问答-------------------- 导出到excel的数据在前面加个" ' " 号就可以保留你的000了
--------------------编程问答-------------------- 不能用加" ' " 号的方法,因为导出的数据,别的系统需要引用的 --------------------编程问答-------------------- 我倒是 没有注意过 我试试我的代码,如果可以的话 代码全部传上来。  --------------------编程问答--------------------
引用 14 楼 flyboy307 的回复:
不能用加" ' " 号的方法,因为导出的数据,别的系统需要引用的


你在别的系统引用取值的时候可以将" ' "去掉嘛 --------------------编程问答-------------------- 不好意思啊,别的系统格式是定死的,不能处理啊 --------------------编程问答-------------------- 不能加" ' "的话,只能在单元格的格式上下手了,设置格式为 文本 
楼主狗下你这样的导出excel要怎么设置单元格格式吧... --------------------编程问答-------------------- 单元格的格式设置了,好像也不行啊 --------------------编程问答-------------------- 我着急啊,就没有解决办法吗 --------------------编程问答-------------------- 用其他办法也可以啊,我的GRIDVIEW是从ORACLE一个表中取出的数据,网上的例子大都是sqlserver的,谁有办法啊 --------------------编程问答--------------------
引用 19 楼 flyboy307 的回复:
单元格的格式设置了,好像也不行啊


你确定你导出的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#
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,