【问题标题】:.NET MVC - Generating excel file using OpenXML.NET MVC - 使用 OpenXML 生成 excel 文件
【发布时间】:2021-06-24 14:29:34
【问题描述】:

我无法从放置在我的项目资源中的模板生成 .xlsx 文件。首先,我正在创建一个新的 ExcelPackage,然后打开我将要填充一些数据的模板 - 但现在我只想下载原始的 xlsx 模板。我正在尝试获取模板而不进行任何修改并下载为“Test.xlsx”。下载后,Excel打开文件后说由于格式或扩展名无效而无法打开我的文件。有谁知道我做错了什么?当我console.log 我的response.data 时,显然有一些二进制数据(大约 50kb),但 excel 无法正确显示这些数据。这是一些代码:

来自 .cshtml 的代码:

generateReport(){
 this.@http.post(SERVER_URL + "/Mvc/Excel/GenerateReport")
      .then(response => {
          var blob = new Blob([response.data], { type: 'application/ms-excel' });
          var downloadUrl = URL.createObjectURL(blob);
          var a = document.createElement('a');
          a.href = downloadUrl;
          a.download = "Test.xlsx";
          document.body.appendChild(a);
          a.click();
       });
       .catch(error => {
         console.log('error ', error);
         return null;
       });
}

这是我的控制器操作:

[HttpPost]
public void GenerateReport(){
   string fileName;
   string strfilepath = TemplatePath + "MyTemplate.xlsx"; 
      //TemplatePath - path from my configuration where my xlsx template is stored

   using(ExcelPackage p = new ExcelPackage())
    {
       using(FileStream = new FileStream(strfilepath, FileMode.Open))  
         { 
           p.Load(stream);
           fileName = "TestReport.xlsx";
           Byte[] bin = p.GetAsByteArray();
           
           Response.ClearContent();
           Response.Buffer = true;
           Response.AddHeader("content-disposition", "attachment; filename=" + fileName);
           Response.ContentType = "application/ms-excel";
           Response.Charset = "";
           Response.BinaryWrite(bin);
           Response.Flush();
           Response.End();
         }
    } 
}  

【问题讨论】:

  • due to invalid format or extension - 你确认你正在生产一个 xlsx 吗?如果将文件重命名为 xls,文件会打开吗?
  • 如果您使用的是 MVC 操作方法,则不应直接操作 HTTP 响应。动作方法应该返回一个动作结果。在这种情况下,有很多文件结果允许您返回二进制文件。您应该使用其中之一。
  • 为什么使用application/ms-excel 作为 .xlsx 文件的 MIME 类型? The correct MIME type is application/vnd.openxmlformats-officedocument.spreadsheetml.sheet
  • 如果我是你,我会直接点击负责生成文件的 URL。验证是否可以通过您的浏览器运行,无需 JavaScript。一旦您确认一切正常然后您就知道问题出在 JavaScript 并且您可以进一步排除该区域的问题。
  • 看了How to export data to Excel in ASP.NET Core 3.0的一篇文章后,我创建了一个项目并推送到github。尝试修改它以满足您的要求。

标签: c# asp.net-mvc openxml export-to-excel


【解决方案1】:

我认为导出excel文件的内容类型应该是application/vnd.ms-excel。

【讨论】:

  • 这将如何解决问题?
  • 我认为内容类型应该是 application/vnd.ms-excel 用于导出 excel 文件。
  • 你为什么这么认为?您认为这将如何解决问题?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2015-07-08
  • 1970-01-01
  • 2020-03-10
  • 1970-01-01
  • 1970-01-01
  • 2018-05-20
相关资源
最近更新 更多