我的 ASP.NET Core MVC 控制器方法应该返回一个包含数据的 Excel 文件,但它是空的

问题描述 投票:0回答:1

这是我的代码:

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
但这也没有效果。

asp.net-core-mvc umbraco closedxml filecontentresult
1个回答
0
投票

在尝试返回之前将流中的位置设置为 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");
}
© www.soinside.com 2019 - 2024. All rights reserved.