2010-06-14 19 views
2

J'ai une page de critères dans mon application asp.net. Lorsque l'utilisateur clique sur le bouton de rapport, d'abord dans une nouvelle page, les résultats sont liés à une grille de données, puis cette page est exportée vers un fichier Excel en changeant la méthode du type de contenu.Comment exporter des données volumineuses vers Excel

Cela fonctionne normalement, mais quand une grande quantité de données arrive, system.outofmemoryexception est levée.

Est-ce que quelqu'un sait un moyen de résoudre ce problème, ou une autre technique utile à faire?

Répondre

6

Cela est probablement dû au fait que votre application tente de créer la totalité de la feuille de calcul Excel en mémoire, puis de la remettre à l'utilisateur une fois l'opération terminée. Pour les ensembles de données volumineux, vous pouvez facilement utiliser toute la mémoire disponible, ce qui peut également ralentir dramatiquement l'application pour le reste des utilisateurs. Au lieu de cela, vous pouvez essayer de transmettre les données à l'utilisateur à l'aide de la fonction de diffusion en continu. Cela utilisera la même quantité de mémoire, quelle que soit la taille de votre ensemble de données. Vous pouvez obtenir les octets de la feuille de calcul Excel ou simplement convertir vos données en un fichier CSV, puis définir le type de réponse HTTP et le diffuser vers l'utilisateur.

Voici un exemple:

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); 

Il y a un tutoriel détaillé à http://bytes.com/topic/asp-net/answers/326796-example-streaming-excel-browser-download

0

Excel dispose également d'un nombre maximum d'enregistrements, que je crois être autour de 65k, mais ne peut pas être directement résultat de votre problème, mais pourrait encore se produire si vous obtenez une erreur en travaillant avec eux.

+2

La limite est par feuille, et est seulement un problème avec l'ancien type de fichier XLS. – Moulde