Экспорт таблицы HTML в Excel с использованием ASP.NET - PullRequest
13 голосов
/ 20 февраля 2012

У меня есть html-таблица (не Gridview), в которой нет нужного заголовка и строк. Вместо этого он имеет настроенную структуру и данные. Я хочу экспортировать эту таблицу в Excel. Как я могу сделать с помощью ASP.NET? enter image description here

Метки представляют собой фиксированный текст, а целочисленные значения поступают из базы данных. Поэтому структура таблицы фиксируется только изменением целых / десятичных значений.

Ответы [ 5 ]

9 голосов
/ 21 марта 2012

Вы хотите экспортировать настраиваемую структуру и данные таблицы HTML (не Gridview) в Excel, используя ASP.NET.

Попробуйте следующий подход

  1. Укажите атрибут ID и добавьте runat="server"

    <table id="tbl" runat="server" >

  2. Добавьте следующий код

    Response.ContentType = "application/x-msexcel"; 
    Response.AddHeader("Content-Disposition", "attachment;
    filename=ExcelFile.xls");
    Response.ContentEncoding = Encoding.UTF8; 
    StringWriter tw = new StringWriter();
    HtmlTextWriter hw = new HtmlTextWriter(tw);
    tbl.RenderControl(hw);
    Response.Write(tw.ToString());
    Response.End();
    
4 голосов
/ 18 февраля 2014

Вы можете использовать ниже код:

Response.ContentType = "application/force-download";
Response.AddHeader("content-disposition", "attachment; filename=Print.xls");
Response.Write("<html xmlns:x=\"urn:schemas-microsoft-com:office:excel\">");
Response.Write("<head>");
Response.Write("<META http-equiv=\"Content-Type\" content=\"text/html; charset=utf-     8\">");
Response.Write("<!--[if gte mso 9]><xml>");
Response.Write("<x:ExcelWorkbook>");
Response.Write("<x:ExcelWorksheets>");
Response.Write("<x:ExcelWorksheet>");
Response.Write("<x:Name>Report Data</x:Name>");
Response.Write("<x:WorksheetOptions>");
Response.Write("<x:Print>");
Response.Write("<x:ValidPrinterInfo/>");
Response.Write("</x:Print>");
Response.Write("</x:WorksheetOptions>");
Response.Write("</x:ExcelWorksheet>");
Response.Write("</x:ExcelWorksheets>");
Response.Write("</x:ExcelWorkbook>");
Response.Write("</xml>");
Response.Write("<![endif]--> ");
StringWriter tw = new StringWriter(); 
HtmlTextWriter hw = new HtmlTextWriter(tw);      
tbl.RenderControl(hw);
Response.Write(tw.ToString());
Response.Write("</head>");
Response.flush();

Также рекомендуется указывать встроенные CSS, если вы хотите, чтобы экспортированный вывод выглядел точно так же, как ваш пользовательский интерфейс. Если вы примените классы CSS к таблице, то она не будет отображаться в экспортированном Excel.

1 голос
/ 21 марта 2014

Если dtReport содержит таблицу (т. Е. Экспортируемые данные), то мы можем экспортировать таблицу в Excel, используя следующий LOC, а также мы можем отформатировать заголовок

    if (dtReports != null && dtReports.Rows.Count > 0 && !string.IsNullOrEmpty(formName))
            {
                string filename = formName.ToUpper() + ParsConstant.XLS_EXTENSION;
                StringWriter tw = new StringWriter();

                using (HtmlTextWriter hw = new HtmlTextWriter(tw))
                {

                    //Binding Datatable to DataGrid.
                    DataGrid dgGrid = new DataGrid();
                    dgGrid.DataSource = dtReports;
                    dgGrid.DataBind();

                    //Some Properties for the Header
                    dgGrid.HeaderStyle.Font.Bold = true;
                    dgGrid.HeaderStyle.Font.Size = 13;

                    //Get the HTML for the control.
                    dgGrid.RenderControl(hw);


                    Response.ContentType = "application/vnd.ms-excel";
                    Response.AppendHeader("Content-Disposition", "attachment; filename=" + filename + "");
                    //Response.Write("<style> TD { mso-number-format:\\@; } </style>");


                    Response.Write(tw.ToString());
                    Response.End();
                }
            }

с использованием формата MSO не будетизбегая начальных нулей, но он преобразует текст в строку, что не рекомендуется для выполнения операций.

0 голосов
/ 20 февраля 2012

Там нет автоматического способа. Но вы можете использовать тот же код для создания таблицы и записи ее в вывод. Если вы запишите его в виде простого файла CSV, то пользователь может загрузить его в Excel, просто щелкнув загруженный файл.

Установив правильные заголовки, вы можете настроить браузер для обработки содержимого как загрузки, а не веб-страницы. Я разместил код для этого в этой статье .

0 голосов
/ 20 февраля 2012

Если ваши данные хранятся в базе данных (если вы не можете сохранить их в файле XML), посмотрите на аналогичный вопрос, который я недавно опубликовал.

Запись строк DataReader в файл Excel

...