zoukankan      html  css  js  c++  java
  • asp.net导出excel科学计数问题

    方法一:

    在asp.net 中 我一般都是将要导出的数据放到gridview网格里,首先对网格邦定数据时 字符串形式处理,然后再用普通的形式导出excel就把问题解决了。
      我的代码非常简单:在邦定gridview控件时在rowdatabound事件中队数据格式化
     protected void gError_RowDataBound(object sender, GridViewRowEventArgs e)
        {
               //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%
            for (int i = 0; i < e.Row.Cells.Count; i++)
            {
                if (e.Row.RowType == DataControlRowType.DataRow)
                    e.Row.Cells[i ].Attributes.Add("style", "vnd.ms-excel.numberformat:@");
            }
               
        }
       然后执行到处操作就不会出现问题了
     protected void btnOut_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.UTF7;
          //设置输出文件类型为excel文件。 
          Response.ContentType = "application/ms-excel";
           System.IO.StringWriter oStringWriter = new System.IO.StringWriter();
           System.Web.UI.HtmlTextWriter oHtmlTextWriter = new System.Web.UI.HtmlTextWriter(oStringWriter);
           this.gError.RenderControl(oHtmlTextWriter);
            Response.Output.Write(oStringWriter.ToString());
            Response.Flush();
            Response.End();
        }
     
    public override void VerifyRenderingInServerForm(Control control)
        {
            //base.VerifyRenderingInServerForm(control);
        }
    在winform程序开发时,处理的办法就是在导出的过程中,开始试了 处理excel对象的格式 mysheet.Cells.NumberFormat = "#";
    后来没有成功。最后还是用了逐条纪录进行字符格式转化的方法,即添加“ '  ”.
     我写得代码主要部分如下
      执行数据导出#region  执行数据导出
                try
                {
                    //到导出excel
                    Excel.ApplicationClass my = new Excel.ApplicationClass();
                    if (my == null)
                    {
                        MessageBox.Show("无法创建excel对象,可能您的系统没有安装excel");
                        return;
                    }
                    my.Visible = false;
                    Excel.Workbook mybook = (Excel.Workbook)my.Workbooks.Add(1);
                    ((Excel.Worksheet)mybook.Worksheets[1]).Name = "sheet1";
                    Excel.Worksheet mysheet = (Excel.Worksheet)mybook.Worksheets[1];
                    // mysheet.Cells.NumberFormat = "#";
                   //导出列名
                    for (int j = 0; j < this.dgvShow.Columns.Count; j++)
                    {
                        if (this.dgvShow.Columns[j].Visible == true)
                        {
                            mysheet.Cells[1, j + 1] = "'" + Convert.ToString(this.dgvShow.Columns[j].HeaderText);//加"'"防止科 学计数法
                        }
                    }
                    //导出数据
                    for (int i = 0; i < this.dgvShow.Rows.Count; i++)
                    {
                        for (int j = 0; j < this.dgvShow.Columns.Count; j++)
                        {
                            mysheet.Cells[i + 2, j + 1] = "'" + Convert.ToString(this.dgvShow.Rows[i].Cells[j].Value);
                        }
                    }
                    if (savefilename != "")
                    {
                        try
                        {
                            //mybook.Save();
                            mybook.SaveCopyAs(savefilename);
                            MessageBox.Show("excel文件导出成功!");
                        }
                        catch (Exception ex)
                        {
                            MessageBox.Show("导出文件出现错误,文件可能正被打开!
    " + ex.Message);
                        }
                    }
    
                    GC.Collect();
                }
                catch (Exception ex)
                {
                    MessageBox.Show("数据导出时出现错误,一下是详细错误信息:
    " + ex.Message);
                    return;
                }
                #endregion 
    View Code

    方法2:

    using System;
      2using System.Collections;
      3using System.ComponentModel;
      4using System.Data;
      5using System.Drawing;
      6using System.Web;
      7using System.Web.SessionState;
      8using System.Web.UI;
      9using System.Web.UI.WebControls;
     10using System.Web.UI.HtmlControls;
     11
     12namespace eMeng.Exam
     13{
     14/**//// <summary>
     15/// OutPutExcel 的摘要说明。
     16/// </summary>
     17public class OutPutExcel : System.Web.UI.Page
     18{
     19protected System.Web.UI.WebControls.Button Button1;
     20protected System.Web.UI.WebControls.DataGrid DataGrid1;
     21
     22private void Page_Load(object sender, System.EventArgs e)
     23{
     24// 在此处放置用户代码以初始化页面
     25DataGrid1.DataSource=CreateDataSource();
     26DataGrid1.DataBind();
     27}
     28/**//// <summary>
     29/// 创建数据源
     30/// </summary>
     31/// <returns>DataView</returns>
     32ICollection CreateDataSource() 
     33{
     34
     35DataTable dt = new DataTable();
     36DataRow dr;
     37dt.Columns.Add(new DataColumn("身份证号码", typeof(string)));
     38dt.Columns.Add(new DataColumn("图书单价",typeof(decimal)));
     39dt.Columns.Add(new DataColumn("购买数量",typeof(Int32)));
     40dt.Columns.Add(new DataColumn("总价格",typeof(decimal)));
     41
     42
     43for (int i = 0; i < 30; i++) 
     44{
     45dr = dt.NewRow();
     46
     47dr[0] = "123456789123456789";
     48dr[1] = 100 * i /3.0;
     49dr[2] = i + 5;
     50dr[3] = (decimal)dr[1] * (Int32)dr[2];                
     51dt.Rows.Add(dr);
     52}
     53DataView dv = new DataView(dt);
     54return dv;
     55}
     56/**//// <summary>
     57/// 输出到Excel
     58/// </summary>
     59/// <param name="sender"></param>
     60/// <param name="e"></param>
     61private void Button1_Click(object sender, System.EventArgs e)
     62{
     63Response.Clear(); 
     64Response.Buffer= true; 
     65Response.Charset="GB2312";    
     66Response.AppendHeader("Content-Disposition","attachment;filename=FileName.xls"); 
     67Response.ContentEncoding=System.Text.Encoding.GetEncoding("GB2312");//设置输出流为简体中文
     68Response.ContentType = "application/ms-excel";//设置输出文件类型为excel文件。 
     69this.EnableViewState = false;    
     70System.Globalization.CultureInfo myCItrad = new System.Globalization.CultureInfo("ZH-CN",true);
     71System.IO.StringWriter oStringWriter = new System.IO.StringWriter(myCItrad); 
     72System.Web.UI.HtmlTextWriter oHtmlTextWriter = new System.Web.UI.HtmlTextWriter(oStringWriter);
     73this.DataGrid1.RenderControl(oHtmlTextWriter); 
     74Response.Write(oStringWriter.ToString());
     75Response.End();
     76}
     77
     78Web 窗体设计器生成的代码#region Web 窗体设计器生成的代码
     79override protected void OnInit(EventArgs e)
     80{
     81//
     82// CODEGEN: 该调用是 ASP.NET Web 窗体设计器所必需的。
     83//
     84InitializeComponent();
     85base.OnInit(e);
     86}
     87
     88/**//// <summary>
     89/// 设计器支持所需的方法 - 不要使用代码编辑器修改
     90/// 此方法的内容。
     91/// </summary>
     92private void InitializeComponent()
     93{    
     94this.Button1.Click += new System.EventHandler(this.Button1_Click);
     95this.DataGrid1.ItemDataBound += new System.Web.UI.WebControls.DataGridItemEventHandler(this.DataGrid1_ItemDataBound);
     96this.Load += new System.EventHandler(this.Page_Load);
     97
     98}
     99#endregion
    100
    101private void DataGrid1_ItemDataBound(object sender, System.Web.UI.WebControls.DataGridItemEventArgs e)
    102{
    103if(e.Item.ItemType == ListItemType.Item || e.Item.ItemType == ListItemType.AlternatingItem)
    104{
    105e.Item.Cells[0].Attributes.Add("style","vnd.ms-excel.numberformat:@");
    106e.Item.Cells[3].Attributes.Add("style","vnd.ms-excel.numberformat:¥#,###.00");
    }
    }
    }
    }
    View Code

    方法3:通过CSS

    <style type="text/css">
    <!--
    td {
        background-color: #FFFFFF;
    }
     
    .txt
        {padding-top:1px;
        padding-right:1px;
        padding-left:1px;
        mso-ignore:padding;
        color:black;
        font-size:11.0pt;
        font-weight:400;
        font-style:normal;
        text-decoration:none;
        font-family:宋体;
        mso-generic-font-family:auto;
        mso-font-charset:134;
        mso-number-format:"@";
        text-align:general;
        vertical-align:middle;
        mso-background-source:auto;
        mso-pattern:auto;
        white-space:nowrap;}
    -->
    </style>
    View Code
  • 相关阅读:
    dev c++ 字符间隔大 build with c++11
    What does -> mean in Python function definitions?
    input something to stdin, especially there is "$" in the uname
    control gpu memory
    调研打标(标签)的实现方式
    分页设计思考
    模糊查询的几种实现方式
    Error creating bean with name '***': Injection of resource dependencies failed,Bean named 'redisService' is expected to be of type
    Could not write JSON: No serializer found for class
    神奇BUG
  • 原文地址:https://www.cnblogs.com/qiushuixizhao/p/3792680.html
Copyright © 2011-2022 走看看