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?