Есть много способов достичь этого.
Вариант 1: сохранить в wwwroot
Вы можете создать Excel и сохранить его в папке wwwroot
. И тогда вы можете использовать его как статический контент на странице.
Например, у вас есть папка с именем temp в папке wwwroot
, в которой содержатся все новые сгенерированные экземпляры.
<a href="\temp\development\user1\2018\5\9\excel1.xlsx" download>Download</a>
У этого подхода есть ограничения. 1 из них - новый атрибут download
. Работает только в современных браузерах.
Вариант 2: байтовый массив
Другой способ - сгенерировать Excel, преобразовать его в байтовый массив и отправить обратно в контроллер. Для этого я использую библиотеку «EPPlus» (v: 4.5.1), которая поддерживает .Net Core 2.0.
Ниже приведены лишь некоторые примеры кодов, которые я собрал, чтобы дать вам идею. Это не производство готово.
using OfficeOpenXml;
using OfficeOpenXml.Style;
namespace DL.SO.Web.UI.Controllers
{
public class ExcelController : Controller
{
public IActionResult Download()
{
byte[] fileContents;
using (var package = new ExcelPackage())
{
var worksheet = package.Workbook.Worksheets.Add("Sheet1");
// Put whatever you want here in the sheet
// For example, for cell on row1 col1
worksheet.Cells[1, 1].Value = "Long text";
worksheet.Cells[1, 1].Style.Font.Size = 12;
worksheet.Cells[1, 1].Style.Font.Bold = true;
worksheet.Cells[1, 1].Style.Border.Top.Style = ExcelBorderStyle.Hair;
// So many things you can try but you got the idea.
// Finally when you're done, export it to byte array.
fileContents = package.GetAsByteArray();
}
if (fileContents == null || fileContents.Length == 0)
{
return NotFound();
}
return File(
fileContents: fileContents,
contentType: "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet",
fileDownloadName: "test.xlsx"
);
}
}
}