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

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

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

在 C# 中,我们常常需要将数据保存为 Excel 文件。当我们使用 MVC 模式时,我们可能需要在视图中生成 Excel 文件并返回给客户端。本文将介绍如何在 MVC 视图中生成 Excel 文件并正确设置内容类型。

生成 Excel 文件

我们可以使用第三方库 EPPlus 来生成 Excel 文件。EPPlus 是一个基于 Open XML 标准的 .NET 库,可以读写 Excel 文件格式(xlsx)。

在生成 Excel 文件前,我们需要将数据存储在一个 DataTable 中。下面是一个简单的示例:

public DataTable GetData()
{
    var data = new DataTable();
    data.Columns.Add("Name", typeof(string));
    data.Columns.Add("Age", typeof(int));
    data.Rows.Add("Alice", 25);
    data.Rows.Add("Bob", 30);
    data.Rows.Add("Charlie", 35);
    return data;
}

接下来,使用 EPPlus 创建一个新的 Excel 工作簿,将数据填充到工作表中:

var data = GetData();
using (var package = new ExcelPackage())
{
    var worksheet = package.Workbook.Worksheets.Add("Sheet1");
    worksheet.Cells["A1"].LoadFromDataTable(data, true);
    byte[] bytes = package.GetAsByteArray();

    // 将字节数组返回给客户端,稍后我们将设置正确的内容类型
    return File(bytes, "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet");
}

以上代码将生成一个包含数据的 Excel 文件并将其转换为字节数组。现在我们需要将其返回给客户端。

设置内容类型

在 MVC 中,我们可以使用 File() 方法将文件发送给客户端。在这个方法中,我们需要将文件的字节数组作为参数传递。

public ActionResult Excel()
{
    var data = GetData();
    using (var package = new ExcelPackage())
    {
        var worksheet = package.Workbook.Worksheets.Add("Sheet1");
        worksheet.Cells["A1"].LoadFromDataTable(data, true);
        byte[] bytes = package.GetAsByteArray();

        // 设置内容类型为 Excel 文件
        return File(bytes, "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet");
    }
}

当客户端接收到文件时,需要根据文件类型进行不同的处理。因此,我们需要设置正确的内容类型。

在本例中,我们将设置内容类型为 application/vnd.openxmlformats-officedocument.spreadsheetml.sheet,这是一个标准的 MIME 类型,表示 Excel 文件。在 MVC 中,我们可以使用 ContentType 属性来设置内容类型:

// 设置内容类型为 Excel 文件
return File(bytes, "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet");
总结

本文介绍了如何在 MVC 视图中生成 Excel 文件并正确设置内容类型。我们使用 EPPlus 库来生成 Excel 文件,并使用 File() 方法将其发送给客户端。在 File() 方法中,我们设置了正确的内容类型,以便客户端可以正确地处理文件。