匯出 Excel 最讓人頭疼的事,就是出現亂碼,尤其是中文字的處理,還分簡體與繁體。如果碰上 big-5 沒定義的字,例如「炁」,又要開始掉頭髮了。為了讓大家擁有豐厚的髮量,路上不被人叫阿伯,整理了目前測試後有效的解決方式,早晚服用,三日見效,7天後讓你在夜市從街頭逛到巷尾都被攤販老闆喊「帥哥」!
StringBuilder sb = new StringBuilder();
protected void Page_Load(object sender, EventArgs e)
{
BindData();
//匯出至 excel format.
Response.Clear();
string strFileName = "导出后";
if(Request.Browser.Browser=="IE")
strFileName = Server.UrlEncode(strFileName);
Response.AddHeader("Content-Disposition", "attachment;filename="+strFileName+".xls");
Response.ContentType = "application/vnd.ms-excel";
Response.Write(sb.ToString());
Response.Flush();
Response.End();
}
private void BindData()
{
sb.Append("<html>");
sb.Append("<head>");
sb.Append("<style type='text/css'>");
//將所有td的欄位格式改為"文字"
sb.Append("td{mso-number-format:\"\\@\";}");
sb.Append("</style>");
sb.Append("</head>");
sb.Append("<body>");
//避免內容出現亂碼
sb.Append("<meta http-equiv=Content-Type content=text/html; charset=utf-8>");
//此處可撰寫迴圈讀取資料--開始
sb.Append("<table>");
sb.Append("<tr><td>炁</td></tr>");
sb.Append("</table>");
//此處可撰寫迴圈讀取資料--結束
sb.Append("</body>");
sb.Append("</html>");
}
下載 Excel 檔名的部分,參考了保哥的建議,只針對 IE 瀏覽器進行 Server.UrlEncode()。而內容的部分,則是增加一行:<meta http-equiv=Content-Type content=text/html; charset=utf-8>
將所有內容都以 utf-8 編碼,不再出現有些中文字無法顯示的情況。
此外,提供了 style 設定,讓匯出的 Excel 都能夠以「文字」的格式呈現,這對於有數字的欄位很有幫助。
參考:
01:ASP.NET 如何設定強制下載檔案並正確處理中文檔名的問題
02:檔案下載或開啟時出現亂碼檔名(不支援簡體)

沒有留言:
張貼留言