ASP.NET MVC EPPlus Загрузить файл Excel
Итак, я использую причудливую библиотеку EPPlus для записи файла Excel и вывода его пользователю для загрузки. Для следующего метода я просто использую некоторые тестовые данные, чтобы свести к минимуму код, тогда я добавлю код, который я использую для подключения к базе данных позже. Теперь я могу полностью загрузить файл, но когда я открываю файл, Excel жалуется, что он не является допустимым файлом и может быть поврежден. Когда я иду посмотреть файл, он говорит, что он 0KB большой. Итак, мой вопрос: где я иду не так? Я предполагаю, что это с MemoryStream. Не делали много работы с потоками, поэтому я не совсем уверен, что использовать здесь. Любая помощь будет оценена!
[Authorize]
public ActionResult Download_PERS936AB()
{
ExcelPackage pck = new ExcelPackage();
var ws = pck.Workbook.Worksheets.Add("Sample1");
ws.Cells["A1"].Value = "Sample 1";
ws.Cells["A1"].Style.Font.Bold = true;
var shape = ws.Drawings.AddShape("Shape1", eShapeStyle.Rect);
shape.SetPosition(50, 200);
shape.SetSize(200, 100);
shape.Text = "Sample 1 text text text";
var memorystream = new MemoryStream();
pck.SaveAs(memorystream);
return new FileStreamResult(memorystream, "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet") { FileDownloadName = "PERS936AB.xlsx" };
}
Ответы
Ответ 1
Вот что я использую - я использовал это несколько месяцев и не имел проблемы:
public ActionResult ChargeSummaryData(ChargeSummaryRptParams rptParams)
{
var fileDownloadName = "sample.xlsx";
var contentType = "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet";
var package = CreatePivotTable(rptParams);
var fileStream = new MemoryStream();
package.SaveAs(fileStream);
fileStream.Position = 0;
var fsr = new FileStreamResult(fileStream, contentType);
fsr.FileDownloadName = fileDownloadName;
return fsr;
}
Одна вещь, которую я заметил сразу с места в карьер, заключается в том, что вы не reset положение вашего файла потока обратно на 0.