2012-01-16 4 views
0

Я пытаюсь выполнить запрос, используя для цикла. Для каждого цикла он должен загрузить файл excel. Решение работает отлично, но загружается только первый файл, а два других файла не загружаются. Я также приложил полный код ниже.Загрузите несколько файлов excel из DataTable

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

Или вы можете использовать JET с помощью строки подключения Excel и использовать операторы SQL Insert, чтобы выталкивать ваши данные в пустой файл excel. И использовать другую таблицу для каждого из ваших таблиц

write to excel with JET (но это ограничивает вас 32bit)

Или вы могли бы использовать третий контроль части, чтобы написать Excel файл с тремя таблицами, как рабочие листы

Infragistics excel control

Но если бы я был вами, я бы просто представил пользователю 3 разных ссылки, на которые они могли нажать.

Смежные вопросы