我的机器可以下载 但是有的机器提示  internet explorer 无法下载 XXXXX(来自XXXXXXXX)
下面是导出的方法    private void ExportExcel(DataTable dt, string FileName)
    {
        System.Web.HttpContext.Current.Response.ContentEncoding = System.Text.Encoding.GetEncoding("GB2312");
        System.Web.HttpContext.Current.Response.Buffer = false;
        System.Web.HttpContext.Current.Response.Clear();
        System.Web.HttpContext.Current.Response.Cache.SetCacheability(HttpCacheability.NoCache);
        System.Web.HttpContext.Current.Response.ClearHeaders();
        System.Web.HttpContext.Current.Response.ContentType = "application/vnd.ms-excel";
        System.Web.HttpContext.Current.Response.AppendHeader("Content-Disposition", "attachment;filename=" + FileName + ".xls");        string sep = "";
        foreach (DataColumn dc in dt.Columns)
        {
            System.Web.HttpContext.Current.Response.Write(sep + dc.ColumnName);
            sep = "\t";
        }
        System.Web.HttpContext.Current.Response.Write("\n");        int i;
        foreach (DataRow dr in dt.Rows)
        {
            sep = "";
            for (i = 0; i < dt.Columns.Count; i++)
            {
                string mes = dr[i].ToString();
                if (i == 8)
                {
                    mes = " " + dr[i].ToString();
                }                System.Web.HttpContext.Current.Response.Write(sep + mes);
                sep = "\t";
            }
            System.Web.HttpContext.Current.Response.Write("\n");
        }
        System.Web.HttpContext.Current.Response.End();
    }

解决方案 »

  1.   


    你好能问问你是怎么解决的吗?  我跟你的代码是一样的 
    也出现了和你一样的问题
    FF和chrome导出EXcel正常 IE就会报错 错误提示和你的一样
      

  2.   


    貌似是文件名的编码问题,就是如果文件名出现中文,要用HTML进行编码和解码才能不出错。。
      

  3.   


                if (System.Web.HttpContext.Current.Request.UserAgent.Contains("MSIE") || System.Web.HttpContext.Current.Request.UserAgent.Contains("msie"))
                {
                    // 如果客户端使用 Microsoft Internet Explorer,则需要编码
                    FileName = ToHexString(FileName);     // 如果使用  fileName =Server.UrlEncode(fileName);  则会出现上文中出现的情况
                }        /// <summary>
            /// 为字符串中的非英文字符编码
            /// </summary>
            /// <param name="s"></param>
            /// <returns></returns>
            public static string ToHexString(string s)
            {
                char[] chars = s.ToCharArray();
                StringBuilder builder = new StringBuilder();
                for (int index = 0; index < chars.Length; index++)
                {
                    bool needToEncode = NeedToEncode(chars[index]);
                    if (needToEncode)
                    {
                        string encodedString = ToHexString(chars[index]);
                        builder.Append(encodedString);
                    }
                    else
                    {
                        builder.Append(chars[index]);
                    }
                }            return builder.ToString();
            }
            /// <summary>
            ///指定 一个字符是否应该被编码
            /// </summary>
            /// <param name="chr"></param>
            /// <returns></returns>
            private static bool NeedToEncode(char chr)
            {
                string reservedChars = "$-_.+!*'(),@=&";            if (chr > 127)
                    return true;
                if (char.IsLetterOrDigit(chr) || reservedChars.IndexOf(chr) >= 0)
                    return false;            return true;
            }
            /// <summary>
            /// 为非英文字符串编码
            /// </summary>
            /// <param name="chr"></param>
            /// <returns></returns>
            private static string ToHexString(char chr)
            {
                UTF8Encoding utf8 = new UTF8Encoding();
                byte[] encodedBytes = utf8.GetBytes(chr.ToString());
                StringBuilder builder = new StringBuilder();
                for (int index = 0; index < encodedBytes.Length; index++)
                {
                    builder.AppendFormat("%{0}", Convert.ToString(encodedBytes[index], 16));
                }
                return builder.ToString();
            }