• 数据导出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"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <title>Datos</title> <meta http-equiv="Content-Type" content="text/html; charset=GB2312" /> <style> </style> </head> <body> "; 

    string a2 = " </body> </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  
    
  • 相关阅读:
    [redis读书笔记] 第二部分 sentinel
    [redis读书笔记] 第三部分 多机数据库的实现 复制
    单线程的REDIS为什么这么快?
    [redis读书笔记] 第二部分 单机数据库 RDB持久化
    [redis读书笔记] 第二部分 单机数据库 数据库实现
    选靓号——拼多多笔试题(贪心+暴力)
    种树——拼多多笔试题(暴搜+剪枝)
    【学习笔记】《Java编程思想》 第8~11章
    leetcode——二分
    CodeForces-1265E(期望)
  • 原文地址:https://www.cnblogs.com/panjinzhao/p/5047298.html
Copyright © 2020-2023  润新知