系统本来支持excel2003导出,保存后缀默认为xls,面对office2007这些高版本的却出现乱码现象;如何解决这种导出的问题;最好能够兼容2003和2007版本的,谢谢,Response.Clear();
Response.Buffer = true;
Response.Charset = "GB2312";
//Response.AppendHeader("Content-Disposition", "attachment;filename=FileName.xls");
Response.AppendHeader("content-disposition", "attachment;filename=\"" + System.Web.HttpUtility.UrlEncode("中文名称", System.Text.Encoding.UTF8) + ".xls\"");// 如果设置为 GetEncoding("GB2312");导出的文件将会出现乱码!!!
Response.ContentEncoding = System.Text.Encoding.UTF8;
Response.ContentType = "application/ms-excel";//设置输出文件类型为excel文件。 
System.IO.StringWriter oStringWriter = new System.IO.StringWriter();
System.Web.UI.HtmlTextWriter oHtmlTextWriter = new System.Web.UI.HtmlTextWriter(oStringWriter);
GV.AllowPaging = false;//如果有分页的话,先不分页,再重新加载一次,以把数据全部导出。
BindForExport();
this.GV.RenderControl(oHtmlTextWriter);
Response.Output.Write(oStringWriter.ToString());
Response.Flush();
Response.End();
GV.AllowPaging = true;//回到分页状态
Bind();上面的是原来的代码

解决方案 »

  1.   

    http://hi.baidu.com/shenhui_1/blog/item/5b2fcacfbb78125ef31fe7c9.html
      

  2.   

    创建一个excel的模板。每次导出数据时填充模板。
      

  3.   

    动态判断客户端的安装版本
     
    public bool ExistsRegedit()
            {
                bool ifused = false;
                RegistryKey rk = Registry.LocalMachine;
                RegistryKey akey = rk.OpenSubKey(@"SOFTWARE\\Microsoft\\Office\\11.0\\Word\\InstallRoot\\");
                RegistryKey akeytwo = rk.OpenSubKey(@"SOFTWARE\\Microsoft\\Office\\12.0\\Word\\InstallRoot\\");
                //检查本机是否安装Office2003
                if (akey != null)
                {
                    string file03 = akey.GetValue("Path").ToString();
                    if (File.Exists(file03 + "Excel.exe"))
                    {
                        ifused = true;
                    }
                }
                //检查本机是否安装Office2007
                if (akeytwo != null)
                {
                    string file07 = akeytwo.GetValue("Path").ToString();
                    if (File.Exists(file07 + "Excel.exe"))
                    {
                        ifused = true;
                    }
                }
                return ifused;
            }动态拼接连接字符串
     DataSet ds = new DataSet();
                    string strConn="";
                    if(ExistsRegedit03())
                    {
                        strConn = "Provider=Microsoft.Jet.OLEDB.4.0;" + "Data Source=" + strpath + ";" + "Extended Properties=Excel 8.0;";
                    }else if(ExistsRegedit07())
                    {
                        strConn = "Provider=Microsoft.Ace.OLEDB.12.0;" + "Data Source=" + strpath + ";" + "Extended Properties=Excel 12.0;";
                    }                               
                    OleDbConnection conn = new OleDbConnection(strConn);
                    OleDbDataAdapter myCommand = new OleDbDataAdapter("SELECT * FROM [RelationerTable$]", strConn);
                    myCommand.Fill(ds);
                    DataTable dt = ds.Tables[0];
                    //dt 就是读取的数据集合