I am developing an application in MVC and I want to export data to excel sheet. Currently I am using this code-
 public ActionResult ExportToExcel(int id)
        {
            string UserName = (string)HttpContext.Session["loggedUserName"];
            PurchaseOrderService purchaseOrderService = new PurchaseOrderService();
            PurchaseOrderDTO PurchaseOrder = purchaseOrderService.GetById(Convert.ToInt32(id));
            StringBuilder sb = new StringBuilder();
            sb.Append("<table border=`" + "1px" + "`b>");
            sb.Append("<tr>");
            sb.Append("<td><b><font face=Calibri size=3>Created By : " + UserName + "</font></b></td>");
            sb.Append("</tr>");
            sb.Append("<tr>");
            sb.Append("<td><b><font face=Calibri size=3>Purchase Order No. :" + PurchaseOrder.Id.ToString() + "</font></b></td>");
            sb.Append("</tr>");
            sb.Append("<tr>");
            sb.Append("<td><b><font face=Calibri size=3>Vendor Name : " + PurchaseOrder.VendorName.ToString() + "</font></b></td>");
            sb.Append("</tr>");
            sb.Append("<tr>");
            sb.Append("<td><b><font face=Calibri size=3>Purchase Order Date : " + PurchaseOrder.OrderDate.ToString("dd-MMM-yy") + "</font></b></td>");
            sb.Append("</tr>");
            sb.Append("<tr>");
            sb.Append("</tr>");
            sb.Append("<tr>");
            sb.Append("<td><b><font face=Calibri size=3>SR NO.</font></b></td>");
            sb.Append("<td><b><font face=Calibri size=3>PRODUCT CODE</font></b></td>");
            sb.Append("<td><b><font face=Calibri size=3>VP CODE</font></b></td>");
            sb.Append("<td><b><font face=Calibri size=3>PRODUCT DESCRIPTION</font></b></td>");
            sb.Append("<td><b><font face=Calibri size=3>QUANTITY</font></b></td>");
            sb.Append("</tr>");
            int rowCount = 1;
            var quantity = 0;
            foreach (var item in PurchaseOrder.purchaseOrderItemDTOList)
            {
                if (PurchaseOrder.purchaseOrderItemDTOList.Count > 1)
                {
                    sb.Append("<td><font face=Calibri size=" + "11px" + ">" + rowCount.ToString() + "</font></td>");
                    sb.Append("<td><font face=Calibri size=" + "11px" + ">" + item.Product.ProductCode.ToString() + "</font></td>");
                    sb.Append("<td><font face=Calibri size=" + "11px" + ">" + item.Product.VendorProductCode.ToString() + "</font></td>");
                    sb.Append("<td><font face=Calibri size=" + "11px" + ">" + item.Product.Name.ToString() + "</font></td>");
                    sb.Append("<td><font face=Calibri size=" + "11px" + ">" + item.Quantity.ToString() + "</font></td>");
                    quantity = quantity + item.Quantity;
                }
                sb.Append("</tr>");
                rowCount = rowCount + 1;
            }
            sb.Append("<tr>");
            sb.Append("<td  colspan=3></td>");
            sb.Append("<td><b><font face=Calibri size=3>Total Quantity : </font></b></td>");
            sb.Append("<td><font face=Calibri size=" + "11px" + ">" + quantity.ToString() + "</font></td>");
            sb.Append("</tr>");
            sb.Append("</table>");
            HttpContext.Response.AddHeader("content-disposition", "attachment; filename=PO NO_" + PurchaseOrder.Id +"_"+ DateTime.Now.ToString("dd-MMM-yy") + ".xls");
            this.Response.ContentType = "application/vnd.ms-excel";
            byte[] buffer = System.Text.Encoding.UTF8.GetBytes(sb.ToString());
            return File(buffer, "application/vnd.ms-excel");
        } 
This code works properly but when I am trying to open the excel sheet it displays -
The file you are trying to open is in different format than specified by the file extension.
Is there any other way to do that?
 
     
     
     
    