在MVC应用程序中将数据导出到Excel

我正在寻找在我的MVC应用程序导出数据到Excel的各种方法。

  1. 很多库需要将数据存储在DataTable中。

  2. 我有我的数据传递到模型从视图访问。 看来你不能把这个模型传回给控制器。

  3. JavaScript是一个选项,如果它不是作为html表格导出的,而是一个纯粹的Excel文件。

目前,我调用一个函数,将再次运行查询来build立一个string,并使用System.IO.File.WriteAllText将输出该文件。 我不喜欢这种方式,因为我不得不调用数据库来再次运行查询(我已经在视图模型中有我需要的所有数据),path是硬编码的,我想要一个保存对话框popup向上。

有没有更好的方法来做到这一点?

我真的很喜欢以下两种方法之一:

  1. find一个“把戏”从视图传回控制器的数据,也许TempData可以在视图中使用?
  2. JavaScript将产生一个纯粹的Excel(.xlsx)文件

    List<type> record = GetRecords(); StringBuilder sb = new StringBuilder(); sb.AppendLine("Data 1, Data 2, Data 3, Data 4"); foreach (var item in record) { sb.AppendFormat("{0},{1},{2},{3},{4}\n", item.1, item.2, item.3, item.4); } System.IO.File.WriteAllText("myfile.csv", sb.ToString()); 

你可以使用像EPPlus这样的库。 Excel文件可以完全用XML创build。 格式是OpenXML。 本身并没有多less乐趣,但这个库使它易于pipe理。 您可以按需构buildXML文件,然后在响应中进行stream式处理,因此从用户的angular度来看,它们正在下载一个Excel文件。 链接的页面显示了如何从数据源(本例中为DataTable)开始,创build电子表格并将其添加到HttpResponse。 您可以使用公式创build工作表,甚至可以使用多个工作表创build工作簿。