数据导出Excel中文乱码
数据导出到EXCEL提供用户下载,当记录数大于5行时不会出现乱码.但只要不退出Excel,再删除除记录,当记录数小于5行时,导出也不会出现乱码.当然一旦退出Excel再导出就会出现乱码了.
可以试试
试下以下代码,加个头和尾
string a1 = "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<title>Datos</title>\n<meta http-equiv=\"Content-Type\" content=\"text/html; charset=GB2312\" />\n<style>\n</style>\n</head>\n<body>\n";
string a2 = "\n</body>\n</html>";
Response.Write(a1 + sw.ToString() + a2);
另外,UTF7在office2007无法打开。
或者web.config中
requestEncoding="utf-8"
responseEncoding="utf-8"
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 | /// <summary> /// export error datatable /// </summary> /// <param name="dtError"></param> public void ExportErrorDataTable(DataTable dtError) { string fileName = DateTime.Now.ToString( "yyyyMMddHHmmssff" ) + ".xls" ; //设置导出文件的名称 System.Web.HttpContext curContext = System.Web.HttpContext.Current; curContext.Response.ContentType = "application/vnd.ms-excel" ; curContext.Response.ContentEncoding = System.Text.Encoding.UTF8; curContext.Response.AppendHeader( "Content-Disposition" , "attachment;filename=" + System.Web.HttpUtility.UrlEncode(fileName, Encoding.UTF8).ToString()); curContext.Response.Charset = "UTF-8" ; curContext.Response.Write(AddExcelHead()); //显示excel的网格线 curContext.Response.Write(ExportTable(dtError)); //导出 curContext.Response.Write(AddExcelbottom()); //显示excel的网格线 curContext.Response.Flush(); curContext.Response.End(); } #region 公共程序(导出excel) public static string ExportTable(DataTable tb) { string data = "" ; data += "<table cellspacing=\"0\" cellpadding=\"5\" rules=\"all\" border=\"0\">" ; //写出列名 data += "<tr style=\"font-weight: bold; white-space: nowrap;\">" ; foreach (DataColumn column in tb.Columns) { data += "<td>" + column.ColumnName + "</td>" ; } data += "</tr>" ; //写出数据 foreach (DataRow row in tb.Rows) { data += "<tr>" ; foreach (DataColumn column in tb.Columns) { if (column.ColumnName.Equals( "产品名称" )) data += "<td style=\"vnd.ms-excel.numberformat:@\">" + row[column].ToString().Replace( '•' , '.' ) + "</td>" ; else data += "<td style=\"vnd.ms-excel.numberformat:@\">" + row[column].ToString() + "</td>" ; } data += "</tr>" ; } if (tb.Rows.Count < 8) //因为少于8行的话,会出现乱码 { for ( int i = 0; i < 8; i++) { data += "<tr>" ; foreach (DataColumn column in tb.Columns) { data += "<td style=\"vnd.ms-excel.numberformat:@\"> </td>" ; } data += "</tr>" ; } } data += "</table>" ; return data; } public static string AddExcelHead() { StringBuilder sb = new StringBuilder(); sb.Append( "<html xmlns:x=\"urn:schemas-microsoft-com:office:excel\">" ); sb.Append( " <head>" ); sb.Append( " <!--[if gte mso 9]><xml>" ); sb.Append( "<x:ExcelWorkbook>" ); sb.Append( "<x:ExcelWorksheets>" ); sb.Append( "<x:ExcelWorksheet>" ); sb.Append( "<x:Name></x:Name>" ); sb.Append( "<x:WorksheetOptions>" ); sb.Append( "<x:Print>" ); sb.Append( "<x:ValidPrinterInfo />" ); sb.Append( " </x:Print>" ); sb.Append( "</x:WorksheetOptions>" ); sb.Append( "</x:ExcelWorksheet>" ); sb.Append( "</x:ExcelWorksheets>" ); sb.Append( "</x:ExcelWorkbook>" ); sb.Append( "</xml>" ); sb.Append( "<![endif]-->" ); sb.Append( " </head>" ); sb.Append( "<body>" ); return sb.ToString(); } public static string AddExcelbottom() { StringBuilder sb = new StringBuilder(); sb.Append( "</body>" ); sb.Append( "</html>" ); return sb.ToString(); } #endregion |
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· 没有源码,如何修改代码逻辑?
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 记一次.NET内存居高不下排查解决与启示
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
· DeepSeek 开源周回顾「GitHub 热点速览」