ایجاد خروجی اکسل در MVC

خیلی از مواقع لازم هست لیستی که در پیش روی کاربر قرار دادیم رو به شکل فایل اکسل دانلود کنیم. برای اینکار می‌توان از روش زیر استفاده کرد.
نکته‌ای که وجود داره این که:
1- اعداد در خروجی اکسل گرد میشن، من برای جلوگیری از اینکار اول هر عدد یک ' اضافه می‌کنم.
2- چون view ایی برای این اکشن ندارم، از return new EmptyResult(); استفاده می‌کنم.

resultList = requests_BLL.GetAllRequest(userDetials.ID);
if (resultList != null)
{
	List<object> finalResult = new List<object>();
	for (int i = 0; i < resultList.Count; i++)
	{
		finalResult.Add(new
		{
			No = (i + 1),
			PeygiriNumber = "'" + resultList[i].RequestCode.ToString("0"),
			VaziatDarkhast = resultList[i].StatusTitle,
			HalatDarkhast = resultList[i].StateTitle,
			Tarikh = resultList[i].CreateDate_Persian
		});
	}
	var grid = new GridView();
	grid.DataSource = finalResult;
	grid.DataBind();
	Response.ClearContent();
	Response.Buffer = true;
	Response.AddHeader("content-disposition", $"attachment; filename=ExcelFile_{DateTime.Now.ToShortDateString().Replace('/', '-')}.xls");
	Response.ContentType = "application/ms-excel";
	Response.Charset = "";
	using (StringWriter sw = new StringWriter())
	{
		using (HtmlTextWriter htmlwriter = new HtmlTextWriter(sw))
		{
			try
			{
				grid.RenderControl(htmlwriter);
				//UTF8 encoding
				string style = @"<style> .textmode { mso-number-format:\@; } </style> <meta http-equiv='Content-Type' content='text/html; charset=UTF-8'>";
				Response.Write(style);
				Response.Output.Write(sw.ToString());
				Response.Flush();
				Response.End();
			}
			catch
			{ }
		}
	}
	return new EmptyResult();
}
else
{
	return new EmptyResult();
}