#javascript #c# #asp.net #excel #excelpackage
#javascript #c# #asp.net #excel #excelpackage
Вопрос:
Я не уверен, чего мне здесь не хватает. У меня есть кнопка, при нажатии на которую я использую javascript для вызова контроллера. Этот контроллер должен создать файл Excel и вернуть его пользователю, предоставив ему возможность загрузить / сохранить файл. Я пробовал несколько разных методов, но не смог заставить его работать. Вот моя сторона javascript:
function exportList() {
var val = $("#team-dropdown").val();
const date = new Date().toISOString();
const param = {
"Date": date,
"GroupID": 1
}
$.ajax({
url: "@Url.Action("ExportToExcel", "Home")",
type: "POST",
data: param
});
}
Вот моя серверная часть:
public FileResult ExportToExcel(DateTime date, int groupID)
{
Load l = new Load();
List<Load> loadList = l.GetLoadsForGroup(date, groupID);
var fileDownloadName = "fileName.xlsx";
var contentType = "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet";
ExcelPackage pck = new ExcelPackage();
var ws = pck.Workbook.Worksheets.Add("New workbook");
ws.View.ShowGridLines = true;
ws.DefaultColWidth = 25;
ws.Cells[1, 1].Value = "Order #";
var currRow = 2;
foreach (var load in loadList)
{
ws.Cells[2, 2].Value = load.LoadNumber;
}
var fs = new MemoryStream();
pck.SaveAs(fs);
fs.Position = 0;
var fsr = new FileStreamResult(fs, contentType);
fsr.FileDownloadName = fileDownloadName;
return (fsr);
}
Не уверен, какой лучший способ сделать это. Если есть способ получше, пожалуйста, не стесняйтесь уточнить.
Комментарии:
1. Здравствуйте, я использовал
ActionResult
вместо FileResult и выходных данных, которые я отправил, выполнив:Response.Clear(); Response.ContentType = "application/vnd.openxmlformats-officedocument.wordprocessingml.document"; Response.AddHeader("content-disposition", "attachment; filename="" fileName """); Response.BinaryWrite(data); Response.Flush(); Response.End();
2. Еще раз здравствуйте. Я только что использовал ваш код и смог получить рабочую книгу с помощью html
form
. Следующим образом:<form action="/Home/ExportToExcel"> <input type="submit" value="ok" /> </form>
Попробуйте3. @VagnerLucas заставил это работать. Спасибо за вашу помощь!
4. Неплохо. Просто улучшил мой первый комментарий в качестве ответа. Приветствия!
Ответ №1:
Ваш метод выглядит нормально. В этом случае вам просто нужно использовать html form
для публикации вместо использования функции js. В качестве альтернативы, если вы хотите использовать ActionResult
, вы можете написать:
public ActionResult ExportToExcel()
{
Load l = new Load();
List<Load> loadList = l.GetLoadsForGroup(date, groupID);
var fileDownloadName = "fileName.xlsx";
var contentType = "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet";
ExcelPackage pck = new ExcelPackage();
var ws = pck.Workbook.Worksheets.Add("New workbook");
ws.View.ShowGridLines = true;
ws.DefaultColWidth = 25;
ws.Cells[1, 1].Value = "Order #";
var currRow = 2;
foreach (var load in loadList)
{
ws.Cells[2, 2].Value = load.LoadNumber;
}
Response.Clear();
Response.ContentType = contentType;
Response.AddHeader("content-disposition", "attachment; filename="" fileDownloadName """);
Response.BinaryWrite(pck.GetAsByteArray());
Response.Flush();
Response.End();
return View();
}
И вы получите тот же результат, что и ваш метод.