数据导出到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″

 

 

  /// <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  

 

版权声明:本文为panjinzhao原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://www.cnblogs.com/panjinzhao/p/5047298.html