作为Web请求的结果,如何将List <t>导出到Excel

我想知道如何导出一个列表(如数据网格)以优秀。

我不是在谈论CSV,而是一个真正的XML和压缩的XML文件等。

我只看到了一些关于微软Open XML的例子。

第二件事也是最重要的,你如何将excel保存在磁盘上,而不是使用response.write将其写回到客户端。

法案。

我通常通过呈现绑定到列表的DataGrid控件来实现,并将响应内容types设置为“application / vnd.ms-excel”。 该文件然后在Excel中打开。 Excel会给出关于文件types错误的警告,但是它会打开它。

我在Page.Render()中使用的代码如下所示:

Response.ContentType = "application/vnd.ms-excel"; Response.AddHeader("Content-Disposition", "attachment;filename=myfilename.xls"); var grid = new DataGrid(); grid.DataSource = myList; grid.DataBind(); grid.Render(writer); Response.End(); 

我知道这不直接回答你的问题,但也许它会帮助。

您将需要在任一情况下使用Office Open XML SDK (或者为您实现此SDK的库)。 我build议首先熟悉文件格式, Open XML Developer网站可以提供帮助。 这通常是一个不重要的任务,但是如果你的数据真的很简单,你可以使用XLINQ来简化你的工作。

 List<Person> people = new List<Person>(sourceData); XNamespace ns = @"http://schemas.openxmlformats.org/spreadsheetml/2006/main"; Func<Person, XElement> nameColumn = (person) => new XElement(ns + "c", new XAttribute("r", "A1"), new XElement(ns + "v", person.Name); Func<Person, XElement> ageColumn = (person) => new XElement(ns + "c", new XAttribute("r", "A2"), new XElement(ns + "v", person.Age.ToString()); var worksheet = new XDocument( new XElement(ns + "worksheet", new XElement(ns + "sheetData", people.Select((pp,rr) => new XElement(ns + "row", new XAttribute("r", (rr + 1).ToString()), nameColumn(pp), ageColumn(pp)) ).ToArray() ) ) ); 

基于我的知识,我会:

  1. 使用Office Interop创build一个新的XLS文件。
  2. 写入文件到磁盘。
  3. 使用Response.WriteFile发送给客户端。
  4. 从磁盘删除文件。

我敢肯定,还有一个更光滑的方法。

编辑:你应该看看这个,而不是 。 🙂