代码如下: string FileName = "部门和id对应表 " + DateTime.Now + ".xls";
            Response.Charset = "GB2312";
            Response.ContentEncoding = Encoding.UTF8;//System.Text
            //如果设置GB2312会出现乱码
            Response.AddHeader("Content-Disposition", "attachment;filename=" + HttpUtility.UrlEncode(FileName, Encoding.UTF8).ToString());
            Response.AddHeader("content-type", "application / ms - excel");//设置输出文件的类型
            //或Response.ContentType = FileType;
            //定义一个输出流
            StringWriter tw = new StringWriter();//System.IO
            HtmlTextWriter hw = new HtmlTextWriter(tw);
            GridView2.RenderControl(hw);//gridview绑定
            Response.Write(tw.ToString());
            Response.End();最终下载的excel表提示:您尝试打开的文件“”的格式与文件扩展名指定的格式不一致。打开前请验证文件没有损坏并且来源可信。是否立即打开该文件。
点是的话,打开就是空的啥也没有。求高人指点。

解决方案 »

  1.   

    本人强烈建议你直接写成CSV格式,保存为xls 扩展名,效率又高,兼容性又好。
    唯一的不足是“格式与文件扩展名指定的格式不一致”的提示而已。
      

  2.   


    protected void btSaveData_Click(object sender, EventArgs e)
            {
                DataSet ds = 获取一个DataSet数据集;
                if (ds != null && ds.Tables.Count > 0 && ds.Tables[0].Rows.Count > 0)
                {
                    System.IO.StringWriter sw = new System.IO.StringWriter();
                    System.Text.StringBuilder builder = new System.Text.StringBuilder();
                    sw.WriteLine("ID编号,业务受理码,工单类型");
                    foreach (DataRow dr in ds.Tables[0].Rows)
                    {
                          builder = new System.Text.StringBuilder();
                        builder.Append(dr["ID"].ToString());
                        builder.Append(",");
                        builder.Append(dr["MainId"].ToString());
                        builder.Append(",");
                        builder.Append(dr["OrderType"].ToString());
                        sw.WriteLine(builder.ToString());
                    }
                    sw.Close();
                    string filename = Server.UrlPathEncode(DateTime.Now.ToString().Replace(" ", "").Replace("-", "").Replace(":", "") + ".csv");
                    Response.Buffer = false;
                    Response.Charset = "GB2312";
                    Response.AppendHeader("Content-Disposition", "attachment;filename=" + filename);
                    Response.ContentEncoding = System.Text.Encoding.GetEncoding("GB2312");
                    Response.ContentType = "application/ms-excel";
                    EnableViewState = false;
                    Response.Write(sw);
                    Response.End();
                }
                else
                {
                    ClientScript.RegisterStartupScript(GetType(), "", "<script>alert('查询记录为空,无法完成导出操作!');</script>");
                    return;
                }
            }
    希望能帮上忙。页面放一下按钮,这个按钮单击事件中写上以上代码;
      

  3.   

    早上刚好写了一个希望能帮上你 /// <summary>
        /// 导出数据
        /// </summary>
        /// <param name="grv">当前的GridView</param>
        /// <param name="FileType">导出文件类型</param>
        /// <param name="FIleName">默认导出文件名</param>
        /// <param name="sql">传入的sql</param>
        public static void Export(GridView grv, string FileType, string FIleName, string sql)
        {
            grv.AllowPaging = false;
            Bind(grv, sql);
            HttpContext.Current.Response.Charset = "GB2312";
            HttpContext.Current.Response.ContentEncoding = Encoding.UTF8;
            HttpContext.Current.Response.AppendHeader("Content-Disposition", "attachment;filename=" + HttpUtility.UrlEncode(FIleName, Encoding.UTF8).ToString());
            HttpContext.Current.Response.ContentType = FileType;        StringWriter sw = new StringWriter();
            HtmlTextWriter htw = new HtmlTextWriter(sw);
            grv.RenderControl(htw);
            HttpContext.Current.Response.Write(sw.ToString());
            HttpContext.Current.Response.End();
            //this.EnableViewState = false;
        }
        /// <summary>
        /// 绑定GridView
        /// </summary>
        /// <param name="grv">当前GridView</param>
        /// <param name="sql">传入的sql</param>
        public static void Bind(GridView grv, string sql)
        {
            grv.DataSource = DBUtility.DbHelperSQL.Query(sql);
            grv.DataBind();
        }
      

  4.   

    忘了一点  使用的时候      //导出为Excle
        protected void Button1_Click(object sender, EventArgs e)
        {
            string fileName = DateTime.Now.ToString("yyyyMMddhhmmss") + ".xls";
            exportDoc.Export(GridView1, "application/ms-excel", fileName, sql);
        }   点击按钮的操作  本人用的是  GridView  绑定的数据