将大量数据从C#导出到excel的最佳/最快方法是什么?

时间:2011-10-21 02:53:36

标签: c# asp.net-mvc excel openxml

我有使用OpenXML库导出数据的代码。

我有20,000行和22列,需要很长时间(大约10分钟)。

是否有任何解决方案可以将数据从C#导出到excel,这会更快,因为我从asp.net mvc应用程序执行此操作并且许多人的浏览器都超时。

7 个答案:

答案 0 :(得分:2)

假设20'000行和22列各有大约100个字节,单独生成41兆字节的数据。加上xml标签,加上格式化,我会说你最终拉链(.xlsx只是几个压缩的xml文件)100 MB的数据。

当然这需要一段时间,获取数据也是如此。 我建议您使用excel package plus而不是Office OpenXML开发工具包。 http://epplus.codeplex.com/

可能存在一个错误/性能问题,即快速编写并希望它不会爆炸太快的Microsoft代码。

答案 1 :(得分:1)

CSV。它是纯文本文件,但可以由任何版本的Excel打开。

毫无疑问,这是一种将数据导出到Excel的更简单方法。很多网站都以CSV格式提供数据导出。

您需要做的只是添加一个逗号(,)来分隔值和一个换行符来分隔记录。它不需要额外的资源来构建csv文件,因此它非常快。

答案 2 :(得分:1)

我使用名为ClosedXML的开源解决方案,结果非常好

答案 3 :(得分:0)

根据您所定位的Excel版本,您可以将数据公开为Excel 2010可以自然使用的OData服务,并为您处理下载和格式化。

答案 4 :(得分:0)

我假设这些数据需要完全发送到客户端并且已经以某种方式预先过滤,但仍需要发送回发出请求的人。

在这种情况下,您希望“异步”执行此特定操作。我不确定这是否适合您的工作流程,但是假设一个人请求这个大型XML格式的文档,我会:a)排队另一个工作线程以启动文档的生成,同时返回“令牌”(也许是请求者的GUID); b)返回一个页面的链接,请求者可以点击链接(传递令牌),允许页面查找结果。

如果线程已完成处理文档,则将其放入具有唯一名称的特殊文件夹中,并将该标记添加到具有其文档位置的数据库表中。如果该人请求该页面,则该令牌存在于数据库中并且文档存在于文件系统上,则允许他们通过HTTP单击并下载该文档。如果它不存在,则要么告诉它不存在,要么等待结果。 (此消息可以基于收到请求的时间。)

如果此人成功下载文档(您可以通过脚本执行此操作),则可以删除包含该令牌的文档的数据库条目,并从文件系统中删除该文件。

我希望我能正确阅读这个问题。

答案 5 :(得分:0)

我发现通过限制导出操作的数量,我可以加速将数据从数据库导出到Excel电子表格中。我发现通过在写入之前累积100行数据,创建速度提高了至少5-10倍。

答案 6 :(得分:0)

导出数据时导出数据时最常出现的错误在工作流程中

  • 构建模型
  • 构建XML DOM
  • 将XML DOM保存到文件

这个工作流程会导致开销,因为构建XML DOM需要时间,XML DOM与模型一起保存在内存中,然后将整堆数据写入文件。

更好的方法是通过条目将模型条目直接转换为目标格式,并将其直接写入(缓冲)文件。

写入速度快且可以通过Excel读取的低开销格式是CSV(好吧,它的遗产,很尴尬......)。