各位高手好,下面是将网页上的gridview表格生成excel文件的代码,但是有时会有乱码,我就开门见山,先贴下主要代码:
          string strFileName = DateTime.Now.ToString("yyyyMMdd-hhmmss");
          System.Web.HttpContext HC = System.Web.HttpContext.Current;
          HC.Response.Clear();
          HC.Response.Buffer = true;
          HC.Response.ContentEncoding = System.Text.Encoding.UTF8;//设置输出流为简体中文
           
             //---导出为Excel文件
          HC.Response.AddHeader("Content-Disposition", "attachment;filename=" + HttpUtility.UrlEncode(strFileName, System.Text.Encoding.UTF8) + ".xls");
          HC.Response.ContentType = "application/ms-excel";//设置输出文件类型为excel文件。          System.IO.StringWriter sw = new System.IO.StringWriter();
          System.Web.UI.HtmlTextWriter htw = new System.Web.UI.HtmlTextWriter(sw);
          GVVolumeFill.RenderControl(htw);
          HC.Response.Write(sw.ToString());
          HC.Response.End();
      
    现在问题是这样:这段代码可以生成excel,但有时候excel的表是正常的,有时候却显示乱码,我仔细对比了下正常显示的表和乱码表,发现如果表的行数很少,就1,2行就是乱码,而表的内容多一点,比如3行或3行以上,显示就正常,不知这是怎么回事,不知道各位高手有没有碰到过这种情况?请问大家如何解决?
    另外,我用记事本打开显示不正常的excel,内容如下:
<div>
  <table cellspacing="0" cellpadding="5" rules="all" border="0" class="tableBorder" border="1" id="GVVolumeFill" style="width:100%;border-collapse:collapse;">
  <tr>
    <th scope="col">缂栧彿</th><th scope="col">鍚嶇О</th><th scope="col">寮€濮嬫椂闂?/th><th scope="col">瀹屽伐鏃堕棿</th><th scope="col">鎵€灞炲垎鍖?/th><th scope="col">鏂欑</th><th scope="col">濉瓚閲忥紙绔嬫柟绫筹級</th>
</tr>
  <tr>
   <td>1</td><td>绮楀爢鐭虫枡鍖篲1</td><td>2008-03-01</td><td>2008-03-07</td><td>1</td><td>鈪犲尯鏂?/td><td>5000.00</td>
 </tr>
</table>
</div>
    然后,我用记事本在第一行加一行:<meta http-equiv=Content-Type content="text/html;charset=utf-8"/>
也就是:
<meta http-equiv=Content-Type content="text/html;charset=utf-8"/>
<div>
  <table cellspacing="0" cellpadding="5" rules="all" border="0" class="tableBorder" border="1" id="GVVolumeFill" style="width:100%;border-collapse:collapse;">
  <tr>
    <th scope="col">缂栧彿</th><th scope="col">鍚嶇О</th><th scope="col">寮€濮嬫椂闂?/th><th scope="col">瀹屽伐鏃堕棿</th><th scope="col">鎵€灞炲垎鍖?/th><th scope="col">鏂欑</th><th scope="col">濉瓚閲忥紙绔嬫柟绫筹級</th>
</tr>
  <tr>
   <td>1</td><td>绮楀爢鐭虫枡鍖篲1</td><td>2008-03-01</td><td>2008-03-07</td><td>1</td><td>鈪犲尯鏂?/td><td>5000.00</td>
 </tr>
</table>
</div>
   这样乱码就没了,显示就正常了,我就想,如果是这样的话,我就想让C#生成excel的输出流里加一行“<meta http-equiv=Content-Type content="text/html;charset=utf-8"/>”,请问各位这怎么加?

解决方案 »

  1.   

    大家可以试试,把这些标签复制到文本文件再改成excel的xls后缀文件,是乱码,但加了那行<meta http-equiv=Content-Type content="text/html;charset=utf-8"/>后就不是了~
      

  2.   

    将GridView表导出:        protected void ExportToExcel_Click(object sender, EventArgs e)
            {
                string FileName = "游客" + string.Format("{0:yyMMddHHmmssf}", DateTime.Now);            Response.Clear();
                Response.AddHeader("content-disposition", "attachment;filename=" + Server.UrlEncode(FileName) + ".xls");
                Response.Charset = "gb2312";
                Response.ContentType = "application/ms-excel";
                System.IO.StringWriter stringWrite = new System.IO.StringWriter();
                System.Web.UI.HtmlTextWriter htmlWrite = new HtmlTextWriter(stringWrite);            GridView1.RenderControl(htmlWrite);
                Response.Write(stringWrite.ToString());
                Response.End();
            }
    //重载VerifyRenderingInServerForm
      public override void VerifyRenderingInServerForm(Control control)
            {
                // Confirms that an HtmlForm control is rendered for
            }
    刚做的项目用到的
      

  3.   

    你加了charset=utf-8当然就不乱码了,utf_8是可以显示中文嘛
      

  4.   

    Response.Write("<html><head><meta http-equiv=Content-Type content=\"text/html; charset=utf-8\">");
    Response.Write(sw.ToString());
    Response.Write("</body></html>");
    Response.End();
    改成如上代码,便没问题,希望对你有所帮助。