Я нашел в различные шрифты какие-то примеры, чтобы экспортировать информацию, содержавшую в контроле GridView (ASP.NET) или в DataTable в файл .xls или .xlsx (Excel) с C#.
В другом шрифте, я нашел следующий фрагмент кода:
///
/// Fuente: http://www.codeproject.com/Tips/344604/Export-to-EXCEL-from-Datatable-in-Csharp-Net
///
///
public void ExportToExcel(DataTable dt, String nombreDelArchivo)
{
if (dt.Rows.Count > 0)
{
StringWriter tw = new StringWriter();
HtmlTextWriter hw = new HtmlTextWriter(tw);
DataGrid dgGrid = new DataGrid();
dgGrid.DataSource = dt;
dgGrid.DataBind();
// Get the HTML for the control.
dgGrid.RenderControl(hw);
Response.ContentType = "application/xls";
Response.AppendHeader("Content-Disposition", "attachment; filename=" + nombreDelArchivo + "");
Response.Write(tw.ToString());
Response.End();
}
}
Выполнив предыдущую функциональность, я получаю файл Excel:
Но до того, как Excel видит контент файла, появляется следующее предупреждение:
Нажав на кнопку Sí предыдущей бдительности; файл появляется правильно.
Чтобы удалять предыдущую бдительность, я пробовал:
application/application/vnd.openxmlformats-officedocument.spreadsheetml.sheet
application/vnd.ms-excel
application/xlsx
application/xls
Согласно шрифту; это функция безопасности; но я осведомлялся о, существует ли другой способ производить файл Excel с C#, считая базовой информацию, хранившуюся в одном GridView
или в одном DataTable
что по возможности не произвел этот тип сообщений.
Каждый раз, когда ты экспортировал html и хотел увидеть это, как excel у тебя будет это сообщение.
DeberГ-Схвати использовать librerГ-туз, основанный в openxml, как то, чтобы быть
ClosedXML - The easy way to OpenXML
для того, чтобы произвелся excel правильной формы, и пошли это в Response
Si ты анализируешь пример ты увидишь, что ты можешь экспортировать прямо dataset в excel
Аддинг Дататабле, эксперт Ворксеет
Производит excel с этой librerГ - в и ты это посылаешь в Response, края, что это сообщение не deberГ, - чтобы появляться, когда ты отображаешь документ.
С Excel мы обычно работаем с двумя форматами файлов новый формат (XLSX
) что начался с Excel 2007
и будь основан в XML
и старый формат (XLS
) что в бинарном (у тебя есть больше информации о форматах в этой ссылке)
Любой из книжных магазинов ClosedXML и EPPlus действительные, чтобы работать с файлами XLSX
но они не функционируют с файлами в старом формате XLS
.
Чтобы работать с файлами в старом формате (XLS
), мой излюбленный выбор - используя ADO.NET, потому что позволяет использовать файл Excel как будто это была база данных.
Этот способ работать - очень подходящий, когда ты имеешь работать с достаточным количеством данных. Также у него есть Ваши ограничения, потому что ты только работаешь с данными а следовательно не могут устанавливаться форматы, цвета, широкие...
В этой статье о KB Microsoft они объясняют в детали, как делать это и код, который у тебя был бы, был бы больше или такие глупцы (код, полученный от этого ответа SO в Английском языке):
//Most of this code was from David Hayden's blog:
// http://www.davidhayden.com/blog/dave/archive/2006/05/26/2973.aspx
static void Main(string[] args)
{
string connectionString = @"Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\Temp\TestSO1.xls;Extended Properties=""Excel 8.0;HDR=NO;""";
DbProviderFactory factory =
DbProviderFactories.GetFactory("System.Data.OleDb");
using (DbConnection connection = factory.CreateConnection())
{
connection.ConnectionString = connectionString;
using (DbCommand command = connection.CreateCommand())
{
connection.Open(); //open the connection
//use the '$' notation after the sheet name to indicate that this is
// an existing sheet and not to actually create it. This basically defines
// the metadata for the insert statements that will follow.
// If the '$' notation is removed, then a new sheet is created named 'Sheet1'.
command.CommandText = "CREATE TABLE [Sheet1$] (F1 number, F2 char(255), F3 char(128))";
command.ExecuteNonQuery();
//now we insert the values into the existing sheet...no new sheet is added.
command.CommandText = "INSERT INTO [Sheet1$] (F1, F2, F3) VALUES(4,\"Tampa\",\"Florida\")";
command.ExecuteNonQuery();
//insert another row into the sheet...
command.CommandText = "INSERT INTO [Sheet1$] (F1, F2, F3) VALUES(5,\"Pittsburgh\",\"Pennsylvania\")";
command.ExecuteNonQuery();
}
}
}
Конечно, также существует книжный магазин названный NPOI, который позволяет работать с файлами в обоих форматах, хотя, чтобы работать с новым форматом XLSX
, я рекомендую тебя любая из двух предыдущих, потому что, а следовательно я помню, они работоспособнее.
Мой выбор излюбленный и самый простой из всех, он состоит в том, чтобы использовать книжный магазин названный EPPlus. Этот книжный магазин берется за то, чтобы производить родные файлы Excel и не просто maquilar документ HTML меняя ему расширение в XLS для того, чтобы Excel попробовал это открыться, что является тем, что ты делаешь, и разумом, из-за которого Excel достает это объявление предупреждения. С EPPLus код был бы таким:
using (ExcelPackage pck = new ExcelPackage(newFile))
{
Response.ContentType = "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet";
Response.AppendHeader("Content-Disposition", "attachment; filename=" + nombreDelArchivo + "");
ExcelWorksheet ws = pck.Workbook.Worksheets.Add("Nombre de la hoja");
ws.Cells["A1"].LoadFromDataTable(dataTable, true);
var ms = new System.IO.MemoryStream();
pck.SaveAs(ms);
ms.WriteTo(Response.OutputStream);
}