📅  最后修改于: 2023-12-03 15:06:31.906000             🧑  作者: Mango
编写 Excel 内容类型是利用 Microsoft Office 所提供的一种文档格式来生成可读取和编辑的电子表格文件。在 MVC 中,有时需要从视图返回 Excel 文件。本文将介绍如何编写 Excel 内容类型以从 MVC 视图返回 Excel 文件。
首先,需要在 MVC 项目中添加依赖以支持生成 Excel 类型内容。可以使用 ClosedXML 库来生成 Excel 文件内容。需要通过 NuGet 安装 ClosedXML。
Install-Package ClosedXML
接下来,需要编写返回结果类型。在 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 的数据自动生成。
在控制器中调用 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 文件。