Загрузите несколько файлов Excel из DataTable - PullRequest
0 голосов
/ 16 января 2012

Я пытаюсь выполнить запрос, используя цикл. Для каждого цикла следует загрузить файл 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 Ответ

1 голос
/ 16 января 2012

Вы вызываете response.end после создания первого файла - который прерывает остальную часть процесса.

Я не думаю, что вы сможете создать 3 файла Excel для загрузки с помощью этого метода.

В качестве альтернативы вы можете создать 3 CSV-файла на диске, а затем использовать zip-библиотеку для их архивирования.см. архивирование файлов

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

, чтобы писать в Excel с JET (но это ограничивает вас 32-битным)

Или вы можете использовать третий элемент управления длянаписать файл Excel с тремя таблицами в виде рабочих листов

Управление Excel в Infragistics

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

...