Лучшее решение для генерации файла Excel из реальных данных, а не из DataSource.
1] На странице HTML, добавьте
$('#export').click(function() {
var title = "EmployeeData";
var id = guid();
var filter = $("#grid").data("kendoGrid").dataSource._filter;
var data = {
filter: filter,
title: title,
guid: id
};
$.ajax({
url: '/Employee/Export',
type: "POST",
dataType: 'json',
data: JSON.stringify(data),
contentType: "application/json; charset=utf-8",
success: function (result) {
window.location = kendo.format("{0}?title={1}&guid={2}", '/Employee/GetGeneratedExcel', title, id);
}
});
});
2] Добавить метод "Экспорт" к контроллеру:
[HttpPost]
public JsonResult Export(KendoGridFilter filter, string guid)
{
var gridRequest = new KendoGridRequest();
if (filter != null)
{
gridRequest.FilterObjectWrapper = filter.Filters != null ? filter.ToFilterObjectWrapper() : null;
gridRequest.Logic = filter.Logic;
}
var query = GetQueryable().AsNoTracking();
var results = query.FilterBy<Employee, EmployeeVM>(gridRequest);
using (var stream = new MemoryStream())
{
using (var excel = new ExcelPackage(stream))
{
excel.Workbook.Worksheets.Add("Employees");
var ws = excel.Workbook.Worksheets[1];
ws.Cells.LoadFromCollection(results);
ws.Cells.AutoFitColumns();
excel.Save();
Session[guid] = stream.ToArray();
return Json(new { success = true });
}
}
}
3] добавить также метод " GetGeneratedExcel "к контроллеру:
[HttpGet]
public FileResult GetGeneratedExcel(string title, string guid)
{
// Is there a spreadsheet stored in session?
if (Session[guid] == null)
{
throw new Exception(string.Format("{0} not found", title));
}
// Get the spreadsheet from session.
var file = Session[guid] as byte[];
string filename = string.Format("{0}.xlsx", title);
// Remove the spreadsheet from session.
Session.Remove(title);
// Return the spreadsheet.
Response.Buffer = true;
Response.AddHeader("Content-Disposition", string.Format("attachment; filename={0}", filename));
return File(file, "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet", filename);
}
Также смотрите этот проект на github.
См. this проект живого примера, в котором вы можете экспортировать сотрудников в Excel. (Хотя это возвращает фильтруются данные, но вы можете изменить код, чтобы игнорировать фильтр кендо сетки и всегда возвращать все данные. Панель
Спасибо за помощь ... Сделав это, мне нужно создать метод экспорта во всех моих контроллерах (100+). Сегодня у меня есть один Controller Export и частичный просмотр для экспорта кнопки, где мне нужно. – Paul
hi @Stef, Он отлично работает в IE, но в Chrome он сохраняет файл «title.xlsx, attachache», вы можете его исправить? –
Пожалуйста, создайте проблему в github для этого проекта: https://github.com/StefH/KendoGridBinderEx –