【问题标题】:Export a large SQL Server result to excel (Row Count = 1 Million) using c#使用 c# 将大型 SQL Server 结果导出到 excel(行数 = 100 万)
【发布时间】:2020-04-09 23:00:56
【问题描述】:

我需要将 SQL Server 结果导出到 excel 文件(至少一百万行和至少 50 列)

约束:

  1. 我们不能使用互操作
  2. 数据只能在一张纸中
  3. 该进程不应使用超过 5GB 的内存(时间消耗最多 45 分钟)
  4. Excel文件处理库应该是免费的
  5. 我们不想创建 CSV 文件

以下是我已经尝试过的方法:

  1. OpenXML(内存不足异常,如果尝试使用大量 Ram 写入少量数据)
  2. ClosedXML(它使用了太多的内存)
  3. EPPlus(它使用了太多的内存)

我该怎么做?

【问题讨论】:

  • 如果它解决了你的问题,你为什么不安装excel?
  • @JamesZ 上面的应用程序可能会安装在许多服务器上,所以我们不想保留任何依赖关系,否则我们必须在每台服务器上安装 excel。希望你能理解。

标签: c# excel export-to-excel large-data


【解决方案1】:

你可以试试这个

for (i = 0; i <= ds.Tables[0].Rows.Count - 1; i++)
{
    for (j = 0; j <= ds.Tables[0].Columns.Count - 1; j++)
    {
        data = ds.Tables[0].Rows[i].ItemArray[j].ToString();
        xlWorkSheet.Cells[i + 1, j + 1] = data;
    }
}

通过使用数据集

A reference to related article.

【讨论】:

  • 感谢您的意见。我认为它使用的是 Microsoft.Office.Interop.Excel。我们不能在服务器中使用它,因为它需要在系统中安装 excel。
【解决方案2】:

我做了一些非常轻挖掘,发现this。除此之外,我找不到任何可能符合指定要求的东西。

【讨论】:

  • Johnathan Davidow,感谢您的意见。但我们必须使用 c# 来做到这一点。
  • @Dhruv 我做了一点挖掘,发现this resource.
  • 它正在使用 Excel 互操作。我们不能在服务器中使用它,因为它需要安装 excel。
【解决方案3】:

考虑到以下链接Excel specifications,您可以在工作表中拥有的总行数为 1,048,576。无法在一张纸上加载 1000 万行。

考虑到这一点,您确实有以下选项,以 CSV 格式导出数据(使用 CsvHelper 之类的库),并创建一个与该文件连接的 Excel 工作表(您可以在此处查看操作方法@ 987654323@)

【讨论】:

  • 感谢您的输入。如果我们考虑限制,我们仍然可以达到 100 万。并且 CSV 不是一个选项。我们不能要求客户使用 CSV。
  • @Dhruv CSV 的想法只是存储数据(因为将数据转储到 csv 会快得多),并且仅使用 Excel 来显示/探索数据作为 TechNet文章显示。无论哪种方式,最好的选择是打开 OData API 或连接到数据源并仅使用 excel 来探索数据 (microsoft.com/en-us/microsoft-365/blog/2016/06/23/…)
【解决方案4】:

最后,我找到了解决问题的方法 Excel 只不过是一个 zip 文件,它具有用于格式和工作表的文件夹结构。

以下是创建 excel 的最佳方法,我测试了许多库,这是最快的,消耗更少的内存并且不需要依赖。

下面是代码链接: https://github.com/danielgindi/SpreadsheetStreams.net  

这里使用纯XML结构来写excel。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2023-02-19
    • 1970-01-01
    • 1970-01-01
    • 2019-12-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多