خیلی از مواقع لازم هست لیستی که در پیش روی کاربر قرار دادیم رو به شکل فایل اکسل دانلود کنیم. برای اینکار میتوان از روش زیر استفاده کرد.
نکتهای که وجود داره این که:
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(); }