各位高手好,下面是将网页上的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"/>”,请问各位这怎么加?
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"/>”,请问各位这怎么加?
解决方案 »
- 在非绑定的DATAGRIDVIEW加入checkbox字段?
- 这个单例模式类中的静态变量,为何是“全局”的呢?
- DllImport错,指针和固定大小缓冲区只能在不安全的上下文中使用
- C# DevExpress XtraReports
- 100分求解 .rdlc报表分组
- 关于VS2005串口读取的问题
- 求救,请问IEEE754浮点数转换如何实现?
- 请问在一个dll文件中只有一个类,假如类有几百个方法或函数,包含使用时是不是很慢?
- C#调用kernel32.dll中的GetShortPathName获取短文件名得到空字符串
- 关于DataTableMappings。有人用到这个东西吗?
- 用文本编辑器写aspx程序。。。
- 如何在软件系统中增加手机短信查询功能呢?
{
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
}
刚做的项目用到的
Response.Write(sw.ToString());
Response.Write("</body></html>");
Response.End();
改成如上代码,便没问题,希望对你有所帮助。