在C#.net中将Repeater数据导出到Excel

时间:2015-09-17 11:01:55

标签: c# asp.net excel

我必须提供将转发器中显示的所有数据导出到excel文件的功能。我已成功完成此操作,但文件大小超过4MB。

这是我正在使用的代码。

public void ExportToExcel(Repeater name)
{
    Response.Clear();
    Response.Buffer = true;
    Response.AddHeader("content-disposition", "attachment;filename=RepeaterExport.csv");
    Response.Charset = "";
    Response.ContentType = "application/vnd.ms-excel";
    Repeater rp = name;
    StringWriter sw = new StringWriter();
    HtmlTextWriter hw = new HtmlTextWriter(sw);

    foreach (RepeaterItem item in name.Items)
    {
        item.Controls.Remove(item.FindControl("hd_Depot"));
        item.Controls.Remove(item.FindControl("hd_ProdCode"));
        item.Controls.Remove(item.FindControl("hd_Closing"));
        item.Controls.Remove(item.FindControl("hd_groupName"));

    }
    rp.RenderControl(hw);
    Response.Output.Write(sw.ToString());
    Response.Flush();
    Response.End();
}

现在,当我使用xls或xlsx时,它会完美下载,但是如果我使用csv,它会将整个html代码写入excel文件。我的主要动机是将excel文件的大小缩小到1MB以下。请指教。

2 个答案:

答案 0 :(得分:1)

看起来您正在编写HTML或CSV文件并假装它是Content-Type中的Excel工作表,以便使用Excel打开它。更好的解决方案是使用可以为您执行此操作的some library创建一个真正的Excel工作表,即使用xlsx扩展名。

答案 1 :(得分:0)

我认为xlsx包含整个html,这就是为什么它如此之大。

如果您只想导出到csv:

  • 创建一个包含数据的字符串(在for循环中)
  • Contenttype为:“text / csv”

我使用kbCSV和CSVWriter。