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

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

我有2万行22列,需要时间(大约10分钟)。

是否有任何解决scheme,将数据从C#导出到Excel,这将更快,因为我从一个asp.net mvc应用程序这样做,许多人的浏览器超时。

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

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

微软写的代码很快就会出现bug和性能问题。

CSV。 这是一个纯文本文件,但可以通过任何版本的Excel打开。

毫无疑问,将数据导出为ex​​cel是一种更简单的方法。 很多网站提供数据导出为CSV。

你需要做的只是添加一个逗号(,)来分隔这些值和换行来分隔logging。 它不需要额外的资源来build立CSV文件,所以它是相当快的。

我使用了一个名为ClosedXML的开源解决scheme,结果非常好

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

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

在这种情况下,你想要“asynchronous”执行这个特定的操作。 我不确定这是否适合您的工作stream程,但是说一个人请求这个大的XML格式的文档,我会:a)排队另一个工作线程来启动文档的生成,同时返回一个“标记”(也许是一个GUID给请求者); b)返回一个链接到一个页面,请求者可以点击链接(传递令牌),允许页面查找结果。

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

如果用户成功下载文档(并且可以通过脚本执行此操作),则可以使用该标记删除文档数据库的条目,并从文件系统中删除该文件。

我希望我正确地读这个问题。

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

导出数据时最常出现的数据出错时,出现错误

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

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

处理这个问题的一个更好的方法是将模型条目直接转换为目标格式,然后直接写入(缓冲)文件。

一个开销很低,写入速度快,Excel可读的格式就是CSV(好吧,这是传统的,很尴尬…)。