如何将大数据导出到Excel

我在我的asp.net应用程序中有一个标准页面。 当用户点击报表button时,首先在一个新页面中将结果绑定到一个数据网格,然后通过改变内容types方法将该网页导出到excel文件。

这通常起作用,但是当大量的数据到来时,会抛出system.outofmemoryexception。

有谁知道一个办法来解决这个问题,或另一个有用的技术呢?

这可能是因为您的应用程序试图在内存中构build整个Excel电子表格,然后在完成后将其交付给用户。 对于大型数据集,您可以轻松地使用所有可用内存,这很可能也会导致应用程序显着减慢其他用户的速度。

相反,您可以尝试将数据传输给用户。 这将使用相同数量的内存,无论数据集有多大。 您可以获取Excel电子表格的字节,或者简单地将数据转换为CSV,然后设置HTTP响应types并将其传输给用户。

这里是一个例子:

byte[] reportDoc = GetExportExcel(); context.Response.ContentType = "application/vnd.ms-excel"; //set the content disposition header to force download context.Response.AddHeader("Content-Disposition", "attachment;filename=" + "Export.xls"); //write the file content byte array context.Response.BinaryWrite(reportDoc); 

有一个详细的教程在http://bytes.com/topic/asp-net/answers/326796-example-streaming-excel-browser-download

Excel也有最大数量的logging,我相信这个数字大概在65k左右,虽然可能不是你的问题的直接结果,但是如果你在使用它的时候遇到了错误,那么它可能还是会出现。