日期:2014-05-18  浏览次数:20425 次

asp.net导出复杂excel后,页面格式错乱
小弟做了一个导出excel的功能,导出的是伪excel,具体代码如下:
  protected void btnExcle_Click(object sender, EventArgs e)
  {

  HttpContext.Current.Response.AppendHeader("Content-Disposition", "attachment;filename="aaa.xls.xls" + "");
  HttpContext.Current.Response.Charset = "UTF-8";
  HttpContext.Current.Response.ContentEncoding = System.Text.Encoding.GetEncoding("UTF-8");
  HttpContext.Current.Response.ContentType = "application/ms-excel/ms-word";


  System.IO.StringWriter tw = new System.IO.StringWriter();
  System.Web.UI.HtmlTextWriter hw = new System.Web.UI.HtmlTextWriter(tw);
  goExcel.RenderControl(hw);
  HttpContext.Current.Response.Write(tw.ToString());
  HttpContext.Current.Response.End();
   
  }
注意:需导出的页面中存在跨行的情况,导出后,前面一千多行是正常的,但是一千多行后面的数据,格式就乱了,该跨行的列没有跨行了。请问大侠们,如何解决呢?小弟不想用导出ds的方法,就想直接导出页面。

------解决方案--------------------
C# code
 //输出导出结果到客户端
            HttpContext.Current.Response.ContentType = "application/ms-excel";
            HttpContext.Current.Response.AppendHeader("Content-Disposition", "attachment;filename=" + HttpContext.Current.Server.UrlEncode(sheetName) + ".xls");
            HttpContext.Current.Response.BinaryWrite(File.ReadAllBytes(excelPath));

            if (dt.Rows.Count > 10000)
                HttpContext.Current.Response.Write("<script language=\"javascript\" type=\"text/javascript\">EndRequest2();</script>");

            //删除创建的临时文件
            File.Delete(excelPath);

------解决方案--------------------
你这是吧页面上的table组成的html导出成excel 么,如果这样的话是不是页面的html转换到流文件时候html标签出了问题呢?
------解决方案--------------------
先参考这个, 我找下我上次解决方法的代码
private void Export(GridView _gv, string FileName)
{
Response.Clear();
Response.Buffer = true;
Response.Charset = "GB2312";
Response.Write("<meta http-equiv=Content-Type content=text/html;charset=GB2312>");
Response.AppendHeader("Content-Disposition", "attachment;filename=" + HttpUtility.UrlEncode(FileName, Encoding.UTF8).ToString());//FileName.xls");
Response.ContentEncoding = System.Text.Encoding.GetEncoding("GB2312");
Response.ContentType = "application/vnd.xls";//设置输出文件类型为excel文件。
System.IO.StringWriter oStringWriter = new System.IO.StringWriter();
System.Web.UI.HtmlTextWriter oHtmlTextWriter = new System.Web.UI.HtmlTextWriter(oStringWriter);
_gv.RenderControl(oHtmlTextWriter);
Response.Output.Write(oStringWriter.ToString());
Response.Flush();
Response.End();

}
public override void VerifyRenderingInServerForm(Control control)
{
}

------------------------

public void ToExcel()//整个GRIDVIEW导出到EXCEL
{
string filename="网银终端" + DateTime.Now.ToString("yyyyMMdd") + ".xls";
string style = @"<style> .text { mso-number-format:/@; } </script> "; //解决第一位字符为零时不显示的问题

this.GridView1.AllowPaging = false;
this.GridView1.DataBind();

filename = HttpUtility.UrlEncode(filename, System.Text.Encoding.UTF8);//解决导出EXCEL时乱码的问题
Response.ClearContent;

Response.ContentEncoding = System.Text.Encoding.GetEncoding("GB2312");
Response.ContentType = "applicat