从DataTable下载多个excel文件

时间:2012-01-16 11:22:22

标签: asp.net datatable export-to-excel

我正在尝试使用for循环执行查询。对于每个循环,它应该下载一个excel文件。该解决方案工作正常,但只下载了第一个文件,而没有下载其他两个文件。我还附上了下面的完整代码。

    protected void Page_Load(object sender, EventArgs e)
    {

    }

    protected void Btn_Click(object sender, EventArgs e)
    {
        DataTable it = GetList();
        foreach(DataRow dr in it.Rows)
        {
            string a = dr[0].ToString();
            for (int i = 0; i < 3; i++) 
            {
                string inm = it.Rows[i][0].ToString();
                DataTable gt = GetData(inm);
                ExportToSpreadsheet(gt, "Samples");
            }
        }
    }

    public DataTable GetData(string i)
    {

        SqlCommand command = null;
        SqlConnection conn = null;
        conn = new SqlConnection(ConfigurationManager.ConnectionStrings["ConnectionString"].ConnectionString);
        conn.Open();
        command = new SqlCommand("SELECT id, name, class FROM  StudentTable WHERE (id = " + i + ") ORDER BY name";
        DataTable dt = new DataTable();
        SqlDataAdapter ada = new SqlDataAdapter(command);
        ada.Fill(dt);
        return dt;
    }

    public static void ExportToSpreadsheet(DataTable table, string name)
    {
        HttpContext context = HttpContext.Current;

        context.Response.ClearContent();
        context.Response.ContentType = "text/vnd.ms-excel";
        context.Response.AppendHeader("Content-Disposition", "attachment; filename=" + name + ".xls");

        string tab = "";
        foreach (DataColumn dc in table.Columns)
        {
            context.Response.Write(tab + dc.ColumnName);
            tab = "\t";
        }
        context.Response.Write("\n");
        context.Response.Write("\n");
        int i;
        foreach (DataRow dr in table.Rows)
        {
            tab = "";
            for (i = 0; i < table.Columns.Count; i++)
            {
                context.Response.Write(tab + dr[i].ToString());
                tab = "\t";
            }
            context.Response.Write("\n");
        }
        context.Response.End();
    }

我见过类似的帖子。有人建议,可以在服务器上创建zip文件,并在“zip”文件夹中下载多个excel文件。如果可能,我该如何实现上述解决方案呢?

1 个答案:

答案 0 :(得分:1)

你在创建第一个文件后调用response.end - 它会中止进程的其余部分。

我认为您无法使用此方法创建3个Excel文件供下载。

作为替代方案,您可以在磁盘上创建3个CSV文件,然后使用zip库将其压缩。 见zipping files

或者您可以将JET与Excel连接字符串一起使用,并使用SQL Insert语句将数据推送到空的Excel文件中。并为每个表使用不同的工作表

write to excel with JET(但这会将你限制在32位)

或者你可以使用第三方控件来编写一个excel文件,将三个表作为工作表

Infragistics excel control

但如果我是你 - 我只是向用户展示他们可以点击的3个不同的链接。