Трябва да генерирам excel файл за потребител на fl при натискане на бутон. Преди това използвах Netoffice, който работеше добре за настолни приложения. Но сега искам да направя същото с приложение asp.net. По този начин моят сървърен код няма достъп до копието на excel на клиента. Какъв подход да предприема?
Създайте работна книга на Excel в asp.net
comment
Прилича много на stackoverflow.com /questions/150339/
- person Mathias   schedule 08.04.2012
Отговори (5)
Използвайте EPPlus. Позволява ви да създавате електронни таблици на Excel на сървъра. Използвал съм го и работи страхотно. Поддържа разширени функции.
using (ExcelPackage pck = new ExcelPackage())
{
//Create the worksheet
ExcelWorksheet ws = pck.Workbook.Worksheets.Add("Demo");
//Load the datatable into the sheet, starting from cell A1. Print the column names on row 1
ws.Cells["A1"].LoadFromDataTable(tbl, true);
//Format the header for column 1-3
using (ExcelRange rng = ws.Cells["A1:C1"])
{
rng.Style.Font.Bold = true;
rng.Style.Fill.PatternType = ExcelFillStyle.Solid;
//Set Pattern for the background to Solid
rng.Style.Fill.BackgroundColor.SetColor(Color.FromArgb(79, 129, 189));
//Set color to dark blue
rng.Style.Font.Color.SetColor(Color.White);
}
//Example how to Format Column 1 as numeric
using (ExcelRange col = ws.Cells[2, 1, 2 + tbl.Rows.Count, 1])
{
col.Style.Numberformat.Format = "#,##0.00";
col.Style.HorizontalAlignment = ExcelHorizontalAlignment.Right;
}
//Write it back to the client
Response.Clear();
Response.AddHeader("content-disposition", "attachment; filename=file.xlsx");
Response.ContentType = "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet";
Response.BinaryWrite(pck.GetAsByteArray());
Response.End();
}
person
Tyler Treat
schedule
07.04.2012
Изглежда готино. Въпреки че не мога да намеря пример как да създам работна книга и да я изтегля на клиента, без да я записвам на сървъра? Знаете ли лесен начин да направите това?
- person user194076; 08.04.2012
Добавих някакъв код, който показва създаването на работна книга с електронна таблица и записването й на клиента.
- person Tyler Treat; 08.04.2012
Трябва ли EPPlus да се изтегли като Dll и да се свърже с препратка към моя проект? Бих искал да го използвам...
- person Rick; 20.03.2019
Най-гъвкавият и вероятно да направи точно това, от което се нуждаете, ще отнеме малко работа, но е безплатен -- и наистина работи. Използвайте инструментариума, за да разгледате съществуващи документи, за да видите как да създадете функциите, които искате.
person
John Fisher
schedule
07.04.2012
Netoffice изисква MS Office на изпълняваща машина. Вашият сървър има ли го?
person
Dima
schedule
07.04.2012
Можете да опитате проста HTML таблица (включваща тагове html, head и body). Просто го запазете с XLS разширение.
person
Dima
schedule
07.04.2012
Не, имам нужда от сложна манипулация на Excel. netoffice ще работи чудесно, но не разбирам защо не може да работи с asp.net
- person user194076; 08.04.2012
Можете да използвате DataGrid, за да създавате Excel файлове в движение. Не изисква Excel.
public static void ExportDataSetToExcel(DataSet ds, string filename)
{
HttpResponse response = HttpContext.Current.Response;
// first let's clean up the response.object
response.Clear();
response.Charset = "";
// set the response mime type for excel
response.ContentType = "application/vnd.ms-excel";
response.AddHeader(
"Content-Disposition",
"attachment;filename=\"" + filename + "\""
);
// create a string writer
using (StringWriter sw = new StringWriter())
{
using (HtmlTextWriter htw = new HtmlTextWriter(sw))
{
// instantiate a datagrid
DataGrid dg = new DataGrid();
dg.DataSource = ds.Tables[0];
dg.DataBind();
dg.RenderControl(htw);
response.Write(sw.ToString());
dg.Dispose();
ds.Dispose();
response.End();
}
}
}
person
Deb
schedule
08.04.2012
Това решение връща HTML на клиента, но декларира, че всъщност е Excel файл. Проблемът с това е, че Excel разбира вашата малка измама и хвърля предупредителен диалог към потребителя, обяснявайки, че някой се опитва да го излъже.
- person Ian Boyd; 17.10.2012