Экспорт таблицы HTML в Excel с помощью ASP.NET
У меня есть html-таблица (Not Gridview) и у нее нет соответствующих заголовков и строк. Вместо этого он настроил структуру и данные. Я хочу экспортировать эту таблицу в Excel. Как я могу использовать ASP.NET?
![enter image description here]()
Ярлыки - это фиксированный текст, а целочисленные значения поступают из базы данных. Таким образом, структура таблицы фиксируется только с изменением целочисленных/десятичных значений.
Ответы
Ответ 1
Вы хотите экспортировать 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();
Ответ 2
Вы можете использовать код ниже:
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();
Также рекомендуется указывать inline css, если вы хотите, чтобы экспортированный результат выглядел точно так же, как ваш пользовательский интерфейс. Если вы примените классы css к таблице, то это не будет отображаться в экспортированном excel.
Ответ 3
Если 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 не будет избегать начальных нулей, но он преобразует текст в строку, которая не рекомендуется для выполнения операций.
Ответ 4
Если ваши данные основаны на данных (если вы не можете хранить их в XML файле), посмотрите на аналогичный вопрос, который я опубликовал недавно.
Написание строк DataReader в файл Excel
Ответ 5
Нет автоматизированного способа. Но вы можете использовать тот же код для создания таблицы и вместо этого записать ее на выход. Если вы напишете его как простой CSV файл, пользователь может загрузить его в Excel, просто щелкнув загруженный файл.
Установив правильные заголовки, вы можете направить браузер для обработки содержимого как загрузки вместо веб-страницы. Я разместил код, чтобы сделать это в этой статье.