您尝试打开的文件格式与Asp.Net中的文件扩展名所指定的格式不同

您试图打开的文件格式不同于当试图在Excel中打开文件时由文件扩展名c#错误指定的格式。

这是我的代码

public ActionResult Export(string filterBy) { MemoryStream output = new MemoryStream(); StreamWriter writer = new StreamWriter(output, Encoding.UTF8); var data = City.GetAll().Select(o => new { CountryName = o.CountryName, StateName = o.StateName, o.City.Name, Title = o.City.STDCode }).ToList(); var grid = new GridView { DataSource = data }; grid.DataBind(); var htw = new HtmlTextWriter(writer); grid.RenderControl(htw); writer.Flush(); output.Position = 0; return File(output, "application/vnd.ms-excel", "test.xls"); } 

当我试图打开Excel我得到这个错误

您尝试打开的文件格式与文件扩展名指定的格式不同

在这里输入图像说明

点击Yes后,文件正常打开。 但我不希望这个味精出现。

我已经使用CloseXML来解决这个问题。

 public static void ExportToExcel(IEnumerable<dynamic> data, string sheetName) { XLWorkbook wb = new XLWorkbook(); var ws = wb.Worksheets.Add(sheetName); ws.Cell(2, 1).InsertTable(data); HttpContext.Current.Response.Clear(); HttpContext.Current.Response.ContentType = "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet"; HttpContext.Current.Response.AddHeader("content-disposition", String.Format(@"attachment;filename={0}.xlsx",sheetName.Replace(" ","_"))); using (MemoryStream memoryStream = new MemoryStream()) { wb.SaveAs(memoryStream); memoryStream.WriteTo(HttpContext.Current.Response.OutputStream); memoryStream.Close(); } HttpContext.Current.Response.End(); } 

在我的项目中使用Nuget Package Manager安装ClosedXML。

您尝试打开的文件格式与文件扩展名指定的格式不同

你不断得到这个警告信息,因为创build的文件不是一个实际的Excel文件。 如果您将查看生成的文件,它只是一堆html标签。 请记住,一个GridView的RenderControl将会生成一个html表格。

要解决您的问题,您需要使用第三方工具创build一个真正的excel文件(您可能想使用的一个工具是NPOI ),或者创build一个逗号分隔的文件,或者简单地创build一个csv文件,然后返回该文件。

如果有人绊倒了这个…我需要在C#中dynamic地将斑点转换回文件。 PDF的工作得很好,和Excel解释,Excel给了我这个相同的错误。

这是我写的处理excel与其他文件types不同的代码。

给一个真正的文件名excel应用程序/八位字节stream解决了我的问题。 可能不是最干净的做法,但对我的目的来说已经足够了。

 string theExt = Path.GetExtension(theDoc.documentFileName).ToUpper(); Response.Clear(); if (theExt == ".XLS" || theExt == ".XLSX"){ Response.ContentType = "application/octet-stream"; Response.AddHeader("Content-Disposition", string.Format("inline; filename={0}", theDoc.documentFileName)); } else{ Response.ContentType = theDoc.documentMimeType; Response.AddHeader("Content-Disposition", string.Format("inline; filename={0}", theDoc.documentTitle)); } using (MemoryStream stream = new MemoryStream(theDoc.file)) { stream.WriteTo(Response.OutputStream); stream.Close(); }; Response.End(); 

如果有人需要使用CloseXML将数据集导出为ex​​cel文件。

 Dataset ds = { your data from db } var xlsx = new XLWorkbook(); var dataTable = ds.Tables[0]; xlsx.Worksheets.Add(dataTable); xlsx.SaveAs("export.xlsx");