首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >您尝试打开的文件的格式与Asp.Net中的文件扩展名指定的格式不同

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

Stack Overflow用户
提问于 2013-04-22 18:31:38
回答 4查看 68.7K关注 0票数 18

您试图打开的文件的格式与在excel中打开文件时出现的文件扩展名c#错误所指定的格式不同。

以下是我的代码

代码语言:javascript
复制
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后,文件将正确打开。但我不想让这个消息出现。

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2013-04-29 13:35:42

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

代码语言:javascript
复制
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。

票数 23
EN

Stack Overflow用户

发布于 2013-04-22 20:27:50

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

您经常会收到该警告消息,因为所创建的文件不是实际的excel文件。如果你要查看生成的文件,它只是一堆html标签。请记住,GridView的RenderControl将生成一个html表。

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

票数 5
EN

Stack Overflow用户

发布于 2014-08-19 01:34:11

以防其他人偶然发现这个。我需要在C#中将blobs动态地转换回文件。Pdf运行得很好,excel给了我同样的错误,就像OP解释的那样。

这是我写的代码,它处理excel与其他类型的文件不同。

给excel application/octet-stream一个实际的文件名就解决了我的问题。可能不是最干净的方式,但对我的目的来说已经足够好了。

代码语言:javascript
复制
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();
票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/16144900

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档