如何将数据导出到MVC中的Excel表单

我正在开发一个应用程序在MVC,我想导出数据到Excel表。 目前我正在使用这种代码 –

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"); } 

此代码正常工作,但是当我试图打开Excel表格显示 –

 The file you are trying to open is in different format than specified by the file extension. 

有没有其他方法可以做到这一点?

您正在创build不是一个Excel表格,而是一个HTML表格。 这是烦人的每个Excel用户,因为加载文件时出现错误popup是不可避免的。 而且,这种方法不可能采用高级格式,公式,validation等。

我build议使用libp EPPLUS,它为读/写xlsx文件提供了一个非常好的(和快速的)接口。 图书馆有一个很好的许可证,所以你不需要开源你的项目或其他废话。

文献库有一个很好的文档(示例项目)。

http://epplus.codeplex.com/

所以它看起来像你试图打开一个.xls文件的HTML表,我不认为的作品。

将东西放入Excel(imo)最简单的方法是将数据导出为分隔文件(通常是选项卡或逗号)。

有几个库在c#中创buildcsv文件,但它也很容易手动

 StringBuilder sb = new StringBuilder(); //headers sb.AppendLine("column1, column2, column3, column4"); foreach (var item in dataItemsEnumerable) { sb.AppendFormat("{0},{1},{2},{3}\n", item.value1, item.value2, item.value3, item.value4); } File.WriteAllText(sb.ToString, "myFile.csv"); 

如果你创build一个XLS文件,也有一些库可用。 看看这个https://code.google.com/p/excellibrary/

此外这个问题也解释了你的select: 从C#创buildExcel(.XLS和.XLSX)文件