匯出 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:檔案下載或開啟時出現亂碼檔名(不支援簡體)
沒有留言:
張貼留言