【问题标题】:How to export a List<t> to Excel as the result of a web request作为 Web 请求的结果,如何将 List<t> 导出到 Excel
【发布时间】:2011-01-11 19:19:30
【问题描述】:

我想知道如何将列表(如数据网格)导出到 excel。

我说的不是 CSV,而是一个真正的 xlsx 文件,它是 XML 和压缩等。

我只看到过一些 Microsoft 提供的有关 Open XML 的示例。

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

比尔。

【问题讨论】:

  • 这几个例子有什么问题?
  • 请向我们展示您目前拥有的东西,我们可以提供帮助;我们不能为你写完整的东西......你有不工作的示例代码吗?
  • 有趣...当我阅读您的问题时,出现了一个指向此处的广告 (aspose.com/categories/product-family-packs/…)。我相信你有你的答案。
  • 您应该从以下之一开始:stackoverflow.com/questions/151005/… 不过,不确定哪个会输出到流中,因此您可能必须通过临时文件或自己挖掘源代码。
  • 您是否要返回一个 .xlsx 文件(您生成的内容)作为 Web 请求的响应?

标签: c# excel datagrid


【解决方案1】:

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

我在 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();

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

【讨论】:

    【解决方案2】:

    在任何一种情况下,您都需要使用Office Open XML SDK(或为您实现此 SDK 的库)。我建议先熟悉文件格式,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()
            )
        )
    );
    

    【讨论】:

      【解决方案3】:

      根据我的知识,我会:

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

      我相信还有更巧妙的方法。

      编辑:你显然应该看看this instead。 :)

      【讨论】:

      • 不,他提到这是在网络服务器上。您不能在服务器上使用 office 互操作,或者充其量是有问题的。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-05-17
      • 1970-01-01
      • 1970-01-01
      • 2013-09-22
      • 2013-08-23
      • 2015-07-30
      相关资源
      最近更新 更多