L B Choudhury Ответов: 1

Как экспортировать данные нескольких заголовков gridview в excel


У меня есть gridview, который имеет несколько заголовков, добавленных во время выполнения. Я хочу экспортировать данные gridview в excel с тем же форматом. Но пока я пытаюсь это сделать, цвет нескольких строк заголовка продолжает выходить за пределы области таблицы в выходном файле excel, что нежелательно. Код, используемый для экспорта данных, выглядит следующим образом. Пожалуйста, помогите решить эту проблему.
Спасибо.

Что я уже пробовал:

<code>protected void Button1_Click(object sender, EventArgs e)
    {
        Response.Clear();
        Response.Buffer = true;
        Response.AddHeader("content-disposition", "attachment;filename=GridViewExport.xls");
        Response.Charset = "";
        Response.ContentType = "application/vnd.ms-excel";
        using (StringWriter sw = new StringWriter())
        {
            HtmlTextWriter hw = new HtmlTextWriter(sw);
            gdView.HeaderRow.BackColor = Color.White;
            foreach (TableCell hcell in gdView.HeaderRow.Cells)
            {
                hcell.BackColor = Color.White;
            }
            foreach (GridViewRow row in gdView.Rows)
            {
                {
                    row.BackColor = Color.White;
                    foreach (TableCell cell in row.Cells)
                    {
                        cell.CssClass = "textmode";
                    }
                }
            }
            gdView.RenderControl(hw);
            //style to format numbers to string
            string style = @"<style> .textmode { } </style>";
            Response.Write(style);
            Response.Output.Write(sw.ToString());
            Response.Flush();
            Response.End();
        }
    }
    public override void VerifyRenderingInServerForm(System.Web.UI.Control control)
    {
        // controller   
    }</code>

Maciej Los

Все, что вам нужно сделать, это отладить вашу программу.

Richard Deeming

NB: Вы не создаете файл Excel. Вы создаете HTML-файл и просите Excel импортировать его. В результате у вас будет очень мало контроля над форматированием.

Если вы хотите полностью контролировать форматирование, вам нужно будет создать настоящий файл Excel. Существуют различные бесплатные библиотеки, которые позволят вам это сделать. Например:

* EPPlus[^];
* ClosedXML[^];
* SDK OpenXML[^];

1 Ответов

Рейтинг:
1

L B Choudhury

Я мог бы, наконец, решить эту проблему, изменив код, как показано ниже:

protected void Button1_Click(object sender, EventArgs e)
        {
            Response.Clear();
            Response.Buffer = true;
            Response.AddHeader("content-disposition", "attachment;filename=GridViewExport.xls");
            Response.Charset = "";
            Response.ContentType = "application/vnd.ms-excel";
            using (StringWriter sw = new StringWriter())
            {
                HtmlTextWriter hw = new HtmlTextWriter(sw);
                for (int x = 0; x <= 3; x++)
                {
                    GridViewRow rows = (GridViewRow)gdView.HeaderRow.Parent.Controls[x];
                    rows.BackColor = Color.White;
                    rows.Height = 15;
                    for (int i = 0; i <= rows.Cells.Count - 1; i++)
                    {
                        rows.Cells[i].BackColor = Color.Maroon;
                    }
                } 
                foreach (GridViewRow row in gdView.Rows)
                {
                    row.BackColor = Color.White;
                    foreach (TableCell cell in row.Cells)
                    {
                        cell.VerticalAlign = VerticalAlign.Middle;
                        cell.CssClass = "textmode";
                    }
                }
                gdView.RenderControl(hw);
                //style to format numbers to string
                string style = @"<style> .textmode { } </style>";
                Response.Write(style);
                Response.Output.Write(sw.ToString());
                Response.Flush();
                Response.End();
            }
        }
        public override void VerifyRenderingInServerForm(System.Web.UI.Control control)
        {
            // controller   
        }