【发布时间】: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