2010-05-31 17 views
1

Je souhaite exporter certaines données dynamiques d'un site Web ASP.NET vers Excel. J'ai trouvé que le moyen le plus simple qui ne nécessite pas d'utiliser Excel XML ou d'installer Excel sur la machine serveur est de output data as a table et de spécifier le type d'application /vnd.ms-excel.L'exportation vers Excel à partir d'ASP.NET produit des fichiers illisibles avec Excel Viewer

Le problème est quand je le fais et essayez d'ouvrir le fichier dans Excel Viewer, je reçois le message d'erreur suivant:

Microsoft Excel Viewer ne peut pas ouvrir fichiers de ce type.

Puis rien n'est ouvert.

Même un code plus facile comme:

protected void Page_Load(object sender, EventArgs e) 
{ 
    Response.Clear(); 
    Response.Buffer = true; 
    HttpContext.Current.Response.AddHeader("content-disposition", "attachment; filename=Example.xls"); 
    Response.ContentType = "application/vnd.ms-excel"; 
    StringWriter stringWriter = new System.IO.StringWriter(); 
    HtmlTextWriter htmlTextWriter = new System.Web.UI.HtmlTextWriter(stringWriter); 
    dataGrid.RenderControl(htmlTextWriter); 
    Response.Write("<html><body><table><tr><td>A</td><td>B</td></tr><tr><td>C</td><td>D</td></tr></table></body></html>"); 
    Response.End(); 
} 

produit la même erreur.

Qu'est-ce qui peut causer un tel comportement? Est-ce parce que le Viewer ne peut pas lire de tels fichiers, mais la version complète d'Excel peut?

Répondre

1

Le lecteur Excel peut uniquement ouvrir des fichiers Excel. Vous ne l'exportez pas en tant que fichier Excel, vous l'exportez en tant que csv ou html. Ce n'est pas la même chose.

EDIT

Avez-vous essayé cette Export to Excel?

+0

Alors, Excel ** va-t-il ** lire ces données HTML à coup sûr? –

+0

Absolument. Cela fonctionne comme un champion. –

2

Vous ne jamais voulez aller dans le sens d'installer Excel sur le serveur. L'interface COM peut fonctionner sans l'interface utilisateur, mais elle n'est pas conçue pour le faire, et vous pouvez vous retrouver avec un grand nombre d'instances EXCEL.EXE bloquées sur votre serveur s'il y a une erreur quelconque. Il ne fonctionne pas non plus avec les identités de pool d'applications de IIS 7.5 et ne fonctionne pas avec Server Core.

La solution idéale consiste à utiliser un composant tiers capable de générer des fichiers Excel binaires (ou OOXML). SyncFusion et Aspose sont deux fournisseurs majeurs de ces outils. Vous obtiendrez des fichiers qui fonctionneront avec toutes les versions d'Excel, ainsi qu'avec d'autres logiciels tels que OpenOffice, Google Docs, Outlook Web App, etc.

+0

-1 Sa solution n'installe pas Excel sur le serveur. – egrunin

+1

Corriger, mais décourager préventivement cette solution est important parce que beaucoup de gens dans cette situation le prennent comme la prochaine étape après avoir réalisé que l'alimentation HTML dans Excel a des inconvénients du monde réel. –

+0

Merci pour votre commentaire. En fait, je voulais implémenter une solution HTML car le scénario est très basique et je suppose que tous les utilisateurs du site * intranet * auront une version Excel complète installée. Une autre solution que je trouve intelligente est d'utiliser le format Excel Excel (Excel ** 2003 **, 2007 et 2010). Mais c'était impossible dans la situation actuelle (et plus difficile à mettre en œuvre). –