📜  从 mvc 视图返回时如何编写 excel 内容类型 (1)

📅  最后修改于: 2023-12-03 15:06:31.906000             🧑  作者: Mango

从 MVC 视图返回时如何编写 Excel 内容类型

编写 Excel 内容类型是利用 Microsoft Office 所提供的一种文档格式来生成可读取和编辑的电子表格文件。在 MVC 中,有时需要从视图返回 Excel 文件。本文将介绍如何编写 Excel 内容类型以从 MVC 视图返回 Excel 文件。

1. 添加依赖

首先,需要在 MVC 项目中添加依赖以支持生成 Excel 类型内容。可以使用 ClosedXML 库来生成 Excel 文件内容。需要通过 NuGet 安装 ClosedXML。

Install-Package ClosedXML
2. 编写返回结果类型

接下来,需要编写返回结果类型。在 MVC 中,可以使用 FileResult 类型来表示返回的文件流。 使用这个类可以将 Stream 输出到客户端的 Response。需要创建一个新的文件结果类型,该类型从 ActionResult 派生,以便支持 MVC 框架。

public class ExcelResult : ActionResult
{
    private readonly DataTable _table;
    private readonly string _fileName;

    public ExcelResult(DataTable table, string fileName)
    {
        _table = table;
        _fileName = fileName;
    }

    public override void ExecuteResult(ControllerContext context)
    {
        var wb = new XLWorkbook();
        var ws = wb.Worksheets.Add(_table, "Sheet1");
        ws.Columns().AdjustToContents();
        context.HttpContext.Response.Clear();
        context.HttpContext.Response.ContentType = "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet";
        context.HttpContext.Response.AddHeader("content-disposition", $"attachment;filename={_fileName}");
        using (var ms = new MemoryStream())
        {
            wb.SaveAs(ms);
            ms.WriteTo(context.HttpContext.Response.OutputStream);
            ms.Close();
        }
        context.HttpContext.Response.End();
    }
}

上面的代码中,我们创建了一个自定义的 ExcelResult 类,该类从 ActionResult 派生,用于向客户端发送 Excel 文件。可以在调用 ExcelResult 方法时传递 DataTable 和文件名作为参数。Excel 文件将根据 DataTable 的数据自动生成。

3. 使用 ExcelResult

在控制器中调用 ExcelResult 方法以生成 Excel 文件,然后将其返回到客户端。

public ActionResult ExportToExcel()
{
    var table = new DataTable("TestTable");
    table.Columns.Add("Id", typeof(int));
    table.Columns.Add("Name", typeof(string));
    table.Rows.Add(1, "John Doe");
    table.Rows.Add(2, "Jane Smith");
    var fileName = "Test.xlsx";
    return new ExcelResult(table, fileName);
}

上面的代码展示了如何从控制器中调用 ExcelResult 方法,此方法将 DataTable 和文件名作为参数,并将结果返回到客户端。可以使用相同的方法生成电子表格文件并返回。

以上是在 MVC 视图中编写 Excel 文件内容类型的简要介绍。使用上述步骤,可以轻松地生成并返回 Excel 文件。