这是我的代码:
public IActionResult DownloadMyFile(int Id)
{
var fileData = // Service call to get data
using (var workbook = new XLWorkbook())
{
var worksheet = workbook.AddWorksheet("data");
var columnNames = fileData[0].GetType().GetProperties();
var currentColumn = 1;
foreach (var name in columnNames)
{
worksheet.Cell(1, currentColumn).Value = name.Name;
currentColumn++;
}
worksheet.Cell(2, 1).InsertData(fileData);
using (var stream = new MemoryStream())
{
workbook.SaveAs(stream);
var content = stream.ToArray();
return File(content,
"application/vnd.openxmlformats-officedocument.spreadsheetml.sheet",
"MyFile.xlsx");
}
}
}
我正在使用 ClosedXML 将数据放入 Excel 工作表中。然后我将“工作表”保存在流中并将其转换为二进制数组并在
FileContentResult
.中返回
对于上下文,它位于 Umbraco 项目的控制器中
当我运行我的代码并调用此方法时,它会返回一个具有正确名称的 excel 文件。但是当我打开文件时,里面没有数据。 我不知道为什么。当我调试我的代码时,我可以看到“内容”中确实有数据。知道这里发生了什么吗?
我试过将类型更改为
application/octect-stream
,但没有任何改变。
我也尝试将返回类型更改为
HttpResponseMethod
但这也没有效果。
在尝试返回之前将流中的位置设置为 0。
例如:
using (var stream = new MemoryStream())
{
workbook.SaveAs(stream);
stream.Seek(0, SeekOrigin.Begin);
return File(stream,
"application/vnd.openxmlformats-officedocument.spreadsheetml.sheet",
"MyFile.xlsx");
}