Мне нужно сгенерировать файл 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