2012-01-16 18 views
0

forループを使用してクエリを実行しようとしています。各ループについて、Excelファイルをダウンロードする必要があります。ソリューションは完全に機能しますが、最初のファイルのみがダウンロードされ、他の2つのファイルはダウンロードされません。私は以下の完全なコードを添付しました。DataTableから複数の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ファイルをサーバー上に作成し、複数のExcelファイルを "zip"フォルダにダウンロードすることを推奨しています。可能であれば、私はどのように上記のソリューションに実装できますか?

答えて

1

最初のファイルを作成した後で、response.endを呼び出すと、残りのプロセスが中止されます。

この方法で3つのExcelファイルをダウンロードすることはできません。

代わりに、3つのCSVファイルをディスクに作成し、zipライブラリを使用して圧縮することもできます。 zipping files

また、Excelの接続文字列でJETを使用し、SQL Insert文を使用してデータを空のExcelファイルにプッシュすることもできます。そして

をあなたのテーブルの各

write to excel with JETのための別のワークシートを使用します(これは32ビットにあなたを制限)または、ワークシート

として3つのテーブルを持つExcelファイルを書き込むために第三部のコントロールを使用することができますInfragistics excel control

私があなただったら - クリックするだけで3つの異なるリンクが表示されます。

関連する問題