http://community.csdn.net/Expert/topic/5558/5558008.xml?temp=.6493799
用幕白兄的:
public static void ExportExcel(ref System.Web.UI.WebControls.Repeater rp, string strFileName)
{
//DataTable dt = (DataTable)this.Session["GridToExcel"];
//if (dt==null) return;
strFileName= System.Web.HttpUtility.UrlEncode(strFileName,System.Text.Encoding.UTF8); 
//dtgList.DataSource = DataClass.ExecuteDataTable(dtgList.strSQL).DefaultView;
//dtgList.EnableViewState =false;
System.Web.HttpContext.Current.Response.Clear(); 
System.Web.HttpContext.Current.Response.Buffer = true; 
System.Web.HttpContext.Current.Response.Charset = "gb2312";
System.Web.HttpContext.Current.Response.AppendHeader("Content-Disposition", "online; filename=" + strFileName + ".xls");
System.Web.HttpContext.Current.Response.ContentEncoding = System.Text.Encoding.GetEncoding("gb2312");
System.Web.HttpContext.Current.Response.ContentType = "application/ms-excel";
//System.Web.HttpContext.Current.EnableViewState = false;
System.Globalization.CultureInfo myCItrad = new System.Globalization.CultureInfo("zh-CN",true);
System.IO.StringWriter oStringWriter = new System.IO.StringWriter(myCItrad); 
System.Web.UI.HtmlTextWriter oHtmlTextWriter = new System.Web.UI.HtmlTextWriter(oStringWriter);
//oHtmlTextWriter.Write("<table width='100%' border='1'>");
rp.RenderControl(oHtmlTextWriter); 
//oHtmlTextWriter.Write("</table>");
rp = null;
System.Web.HttpContext.Current.Response.Write(oStringWriter.ToString().Replace("<td","<td STYLE='MSO-NUMBER-FORMAT:\\@'"));
System.Web.HttpContext.Current.Response.Buffer = false; 
System.Web.HttpContext.Current.Response.End();
}
---------------------------
可以生成
但是当我的repeater中包括了控件的时候就会出错:
类型“CheckBox”的控件“rp_ctl01_CheckBox3”必须放在具有 runat=server 的窗体标记内。谢谢

解决方案 »

  1.   

    http://blog.csdn.net/ChengKing/category/292667.aspx
      

  2.   

    直接将table(服务器控件)render成html然后作为字符串流下载: /// <summary>控件存现为Html字符串</summary>
    public static string RenderHtml(Control c){
    StringBuilder b = new StringBuilder();
    StringWriter w = new StringWriter(b);
    HtmlTextWriter htw = new HtmlTextWriter(w);
    c.RenderControl(htw);
    c.Dispose();
    return b.ToString();
    }下载:
    public static void ExportString(string s,string fileName){

    HttpResponse response = HttpContext.Current.Response;
    response.Clear();
    response.ContentEncoding = System.Text.Encoding.GetEncoding("gb2312");
    response.AppendHeader("Content-Disposition","attachment; filename="+fileName);

    response.ContentType = GetMime(fileName);
    StreamWriter writer = new StreamWriter(response.OutputStream,response.ContentEncoding);
    try {
    writer.Write(s);
    writer.Flush();
    }
    finally {
    writer.Close();
    response.End();
    }
    }
      

  3.   

    楼上的用不了啊
    谁帮我改一下:
    public void ExportExcel(ref System.Web.UI.WebControls.Repeater rp, string strFileName)
        {
            strFileName = System.Web.HttpUtility.UrlEncode(strFileName, System.Text.Encoding.UTF8);
            System.Web.HttpContext.Current.Response.Clear();
            System.Web.HttpContext.Current.Response.Buffer = true;
            System.Web.HttpContext.Current.Response.Charset = "gb2312";
            System.Web.HttpContext.Current.Response.AppendHeader("Content-Disposition", "online; filename=" + strFileName + ".xls");
            System.Web.HttpContext.Current.Response.ContentEncoding = System.Text.Encoding.GetEncoding("gb2312");
            System.Web.HttpContext.Current.Response.ContentType = "application/ms-excel";
            System.Globalization.CultureInfo myCItrad = new System.Globalization.CultureInfo("zh-CN", true);
            System.IO.StringWriter oStringWriter = new System.IO.StringWriter(myCItrad);
            System.Web.UI.HtmlTextWriter oHtmlTextWriter = new System.Web.UI.HtmlTextWriter(oStringWriter);        
            rp.RenderControl(oHtmlTextWriter);
            rp = null;
            System.Web.HttpContext.Current.Response.Write(oStringWriter.ToString().Replace("<td", "<td STYLE='MSO-NUMBER-FORMAT:\\@'"));
            System.Web.HttpContext.Current.Response.Buffer = false;
            System.Web.HttpContext.Current.Response.End();
        }
    ----------------------------------
    但是当我的repeater中包括了控件的时候就会出错:
    类型“CheckBox”的控件“rp_ctl01_CheckBox3”必须放在具有 runat=server 的窗体标记内。
      

  4.   

    public override void VerifyRenderingInServerForm(Control control)
        {
            //base.VerifyRenderingInServerForm(control);
             
        }
    把这个放在页面的代码中
      

  5.   

    http://www.wsoft.net/Index/Catalog53/225.aspx