2011-07-29 4 views
2

En préface, tout cela se produit sur un intranet local, qui ne nécessite à aucun moment de se connecter à Internet.Téléchargement du fichier Excel ASP.NET sur le bouton cliquez sur

J'ai une base de données sur laquelle j'exécute une requête, après quoi l'utilisateur appuie sur un bouton "Download Spreadsheet" qui crée/envoie la feuille de calcul. La création de la feuille de calcul fonctionne correctement, mais après de nombreuses tentatives, je n'arrive pas à télécharger le fichier. Voici ce que j'ai essayé:

  • Modification de la réponse/objets en-tête
    • TransmitFile
    • WriteFile
    • BinaryStream
    • Redirect
  • Javascript Redirect
    • Réponse. Ecrire (javas Code cript)

Dans la plupart des cas, le résultat est que le fichier Excel est créé, mais pas redirect/commence. Dans le cas de Response.Redirect(), s'il s'agit d'un site Web, il fonctionne très bien, mais s'il s'agit d'une redirection vers un fichier: ///, il déclenche une exception de thread mais pas plus de détails.

Je soupçonne que cela a à voir avec le cycle de vie d'un document ASP.NET, mais je crains de ne pas avoir assez d'expérience avec ASP.NET pour pouvoir le savoir à coup sûr.

+0

Le ContentType est-il défini sur application/vnd.ms-excel sur votre réponse? – FlyingStreudel

+0

Quelle version du framework ASP.NET/.NET utilisez-vous? –

+0

Oui sur le type de contenu, .NET 4 – Itskiddly

Répondre

14
FileInfo file = new FileInfo(PathToExcelFile); 
if (file.Exists) 
{ 
    Response.Clear(); 
    Response.ClearHeaders(); 
    Response.ClearContent(); 
    Response.AddHeader("content-disposition", "attachment; filename=" + fileName); 
    Response.AddHeader("Content-Type", "application/Excel"); 
    Response.ContentType = "application/vnd.xls"; 
    Response.AddHeader("Content-Length", file.Length.ToString()); 
    Response.WriteFile(file.FullName); 
    Response.End(); 
} 
else 
{ 
    Response.Write("This file does not exist."); 
} 
+0

C'est ce que j'ai essayé au début, car il semble que c'est le bon moyen de le faire, mais Response.End() renvoie une erreur d'abandon de thread. – Itskiddly

+0

Hmm ... c'est le code que j'ai copié à partir d'un système de production qui fonctionne pour moi. Je me demande pourquoi ça ne marche pas pour toi. Je vais essayer de comprendre ce qui se passe à Response.End(). –

+0

Essayez peut-être ceci: http://support.microsoft.com/kb/312629/ –

-2
ClientScript.RegisterStartupScript(GetType(), "hwa", "window.open('" + System.Configuration.ConfigurationManager.AppSettings["WebSite"].ToString() + "Document/SummaryReport/" + FileName + "','_blank');", true); 

Est-ce que le code est un fichier Excel téléchargement sur le bouton clic. Alors maintenant, il est facile de télécharger votre fichier Excel en utilisant le code C#.

+0

Pouvez-vous élaborer sur votre réponse? La publication de code seulement ne suffit pas. –

Questions connexes