Экспорт таблицы HTML в Excel с использованием ASP.NET
У меня есть HTML-таблица (не Gridview), и это не имеет надлежащего заголовка и строк. Вместо этого он имеет индивидуальную структуру и данные. Я хочу экспортировать эту таблицу в Excel. Как я могу сделать с помощью ASP.NET?
Метки представляют собой фиксированный текст, а целочисленные значения поступают из базы данных. Поэтому структура таблицы фиксируется только изменением целых / десятичных значений.
5 ответов
Вы хотите экспортировать HTML-таблицу (не Gridview) настроенную структуру и данные в Excel, используя ASP.NET.
Попробуйте следующий подход
Предоставить
ID
и добавитьrunat="server"
атрибут<table id="tbl" runat="server" >
Добавьте следующий код
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();
Вы можете использовать ниже код:
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.
Если 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 не позволит избежать начальных нулей, но преобразует текст в строку, что нежелательно для выполнения операций.
Если ваши данные хранятся в базе данных (если вы не можете сохранить их в XML-файле), посмотрите на аналогичный вопрос, который я недавно опубликовал.
Там нет автоматического способа. Но вы можете использовать тот же код для создания таблицы и записи ее в вывод. Если вы запишите его в виде простого файла CSV, то пользователь может загрузить его в Excel, просто щелкнув загруженный файл.
Установив правильные заголовки, вы можете настроить браузер для обработки содержимого как загрузки, а не веб-страницы. Я разместил код для этого в этой статье.