2013-11-02 18 views
0

我在SqlDataReader(〜500Mb)中有大约3百万行。 如何将这些数据传递给客户端Excel? (excel有限制每张1048K行)将大数据下载到Excel

试图使用ClosedXml。但是我没有设法创造超过100K的纸张。当执行InsertData时总是得到OutOfMemoryException。 Os - Win 32x

不建议 - txt下载。已经完成了。现在需要使用Excel或者通过表格或文件分割数据。

任何想法?

+0

制造商们,你读,每次移动一行到Excel工作表,或一次加载了数据的所有500MB,并试图将其转储到Excel工作表?对于OutOfMemoryException,我会确保直接将行从SqlDataReader(一行,或者尽可能少的行)移动到Excel工作表的某种缓冲流写入器(定期刷新)中(if这样的事情存在)。那么你应该避免一次使用太多的内存。 –

+0

其实在ClosedXml中的SaveAs问题。每当我尝试保存大约100K行时,都会产生错误。 5万行没有问题。但是与此同时,我不能像我为文本文件那样直接写输出响应流,因为ClosedXml不支持这一点。 – RinatMegenbaev

回答

0

这些数据将如何使用? 如果它们会以某种数据透视表形式结束,那么也可以考虑Powerpivot。

它能够管理超过3百万行的方式,除非您需要将它发布到Sharepoint服务器,否则它是免费的。

+2

这更像是一个问题,而不是答案 – geedubb

+0

忘了说。用户是Excel 2007.因此PowerPivot不适合。 – RinatMegenbaev

0

朋友试图导入数据,然后用EXCEL打开?我看到有人这样做,它的工作大多数不知道它是否会与更新和完整性约束,程序员进行更多的尝试工作,它不会工作,另一迪亚将做以下事情,你已经在SQL表中的命令和去打印更容易找到你要在execl中逐步升级的所有内容

0

300万行,每张100万行?循环数据并将其加载到每个工作表中,或者编写一些查询以将第一个表分成3个小表,并将每个新表加载到工作表中。首先是狗慢,但容易,其次会更快。

+0

已经。我用循环使用SqlDataReader来以100K行为单位打印页面。但即使这些数据也无法保存 – RinatMegenbaev

+0

如何将数据加载到Excel中?尽量一次完成,而不是逐行。将一百万(或更少)行加载到数组中,然后将整个数组发送到工作表。 – Ross

+0

我喜欢你说的。但考虑到我必须将文件保存到MemoryStream或磁盘,我总是会出现OutOfMemoryException。 – RinatMegenbaev

1

如果您可以使用商业产品。我建议SoftArtisans Officewriter。您可以download an eval here

随着OfficeWriter您可以结合使用ExcelTemplate's BindDatacontinue modifier

这是什么归结为是< 10行代码的在模板file.It一对夫妇的占位符是很容易实现,将允许您无缝地将数据转到下一个工作表。

声明:我SoftArtisans工作的OfficeWriter