Как экспортировать большие данные в Excel - PullRequest
2 голосов
/ 14 июня 2010

У меня есть страница с критериями в моем приложении asp.net.Когда пользователь нажимает кнопку отчета, сначала на новой странице результаты связываются с сеткой данных, затем эта страница экспортируется в файл Excel с изменением метода типа контента.

Это нормально работает, но когда приходит большое количество данных, выдается исключение system.outofmemoryexception.

Кто-нибудь знает способ решения этой проблемы или другую полезную технику?

Ответы [ 2 ]

6 голосов
/ 14 июня 2010

Вероятно, это происходит потому, что ваше приложение пытается построить всю электронную таблицу Excel в памяти и затем доставить ее пользователю, как только это будет завершено. Для больших наборов данных вы можете легко использовать всю доступную память, что, скорее всего, также приводит к резкому замедлению работы приложения для остальных пользователей.

Вместо этого вы можете попробовать передать данные пользователю. При этом будет использоваться один и тот же объем памяти, независимо от размера вашего набора данных. Вы можете получить байты электронной таблицы Excel или просто преобразовать свои данные в CSV, а затем установить тип ответа HTTP и передать его пользователю.

Вот пример:

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

0 голосов
/ 14 июня 2010

В Excel также есть максимальное количество записей, которое, по моему мнению, составляет около 65 тыс., Хотя может и не быть прямым результатом вашей проблемы, но все же может появиться, если при работе с ними возникнет ошибка.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...