Asp.net 从repeater导出到excel

Asp.net 从repeater导出到excel,asp.net,repeater,Asp.net,Repeater,我已经能够填充一个转发器,但我唯一的问题是将其导出到excel工作表。 excel文件中没有显示任何数据。 我的想法是,由于我单击导出按钮时出现了一些回发,中继器上的数据被删除或其他什么。 代码如下: Response.Clear(); Response.Buffer = true; Response.AddHeader("content-disposition", "attachment;filename=GridViewEx

我已经能够填充一个转发器,但我唯一的问题是将其导出到excel工作表。 excel文件中没有显示任何数据。 我的想法是,由于我单击导出按钮时出现了一些回发,中继器上的数据被删除或其他什么。 代码如下:

        Response.Clear();
        Response.Buffer = true;

        Response.AddHeader("content-disposition",
         "attachment;filename=GridViewExport.xls");
        Response.Charset = "";
        Response.ContentType = "application/vnd.ms-excel";
        StringWriter sw = new StringWriter();
        HtmlTextWriter hw = new HtmlTextWriter(sw);
        Table tb = new Table();
        TableRow tr1 = new TableRow();
        TableCell cell1 = new TableCell();
        cell1.Controls.Add(Repeater1);
        tr1.Cells.Add(cell1);
        tb.Rows.Add(tr1);
        tb.RenderControl(hw);

        //style to format numbers to string
        string style = @"<style> .textmode { mso-number-format:\@; } </style>";
        Response.Write(style);
        Response.Output.Write(sw.ToString());
        Response.Flush();
        Response.End();
Response.Clear();
Response.Buffer=true;
Response.AddHeader(“内容处置”,
“附件;文件名=GridViewExport.xls”);
响应。Charset=“”;
Response.ContentType=“application/vnd.ms excel”;
StringWriter sw=新的StringWriter();
HtmlTextWriter hw=新的HtmlTextWriter(sw);
Table tb=新表();
TableRow tr1=新的TableRow();
TableCell cell1=新的TableCell();
cell1.Controls.Add(Repeater1);
tr1.Cells.Add(cell1);
tb.Rows.Add(tr1);
tb.渲染控制(hw);
//将数字格式化为字符串的样式
字符串样式=@“.textmode{mso数字格式:\@;}”;
回应。写作(风格);
Response.Output.Write(sw.ToString());
Response.Flush();
Response.End();

对于以Excel格式导出数据,我建议使用库而不是编写字符串

EPPlus是一个.net库,用于读取和写入Excel 2007/2010文件 使用OpenOfficeXML格式(xlsx)

EPPlus支持:单元格范围、单元格样式(边框、颜色、填充、字体、, 编号、路线)、图表、图片、形状、注释、表格、, 保护、加密、数据透视表、数据验证

我认为必须将“Repeater1”和表“tb”附加到页面(Page.Controls.Add(tb))。 尝试:

  • 将控件渲染为字符串var rendered=RenderControlToString(tb)
  • 然后清除响应response.clear()
  • 然后写入呈现的字符串响应

可能的副本
public static string RenderControlToString(Control c)
{
    StringBuilder sb = new StringBuilder();
    StringWriter sw = new StringWriter(sb);
    HtmlTextWriter htmlWriter = new HtmlTextWriter(sw);
    c.RenderControl(htmlWriter);
    sw.Close();
    htmlWriter.Close();
    return sb.ToString();

}