2009-08-18 6 views
1

S'il vous plaît suggérer la meilleure option pour permettre à l'utilisateur de télécharger les données dans le datagridView de la page dans Excel format à la machine client.ASp.NET: suggère une meilleure option pour permettre à l'utilisateur de télécharger les données dans la grille de données du côté client au format Excel

J'ai un jeu de données lié à la vue DataGrid. Il peut même télécharger les données de l'ensemble de données vers un Excel du côté client.

SVP suggérez s'il est possible de générer un Excel et de permettre à l'utilisateur de le télécharger côté client? J'utilise asp.Net, C#, serveur SQL, Excel.

Aidez s'il vous plaît!

+0

connexes: http: //stackoverflow.com/questions/150339/Génération-un-excel-fichier-dans-asp-net –

Répondre

2

Je vous suggère de générer un fichier CSV (Comma Separated Values). Ils sont relativement faciles à coder une solution pour, vous pouvez les écrire directement sans avoir à faire interop, et ils s'ouvrent directement dans Excel.

1

Il est possible de coder une solution à l'aide des bibliothèques MS Office Interop.

est ici quelques exemples qui peuvent vous aider:

http://www.codeproject.com/KB/office/datasettoexcel.aspx

http://www.eggheadcafe.com/articles/20050404.asp

http://support.microsoft.com/kb/319180

http://www.c-sharpcorner.com/UploadFile/Globalking/datasettoexcel02272006232336PM/datasettoexcel.aspx

Ce dernier est vrai nifty; Il convertit juste le DataGrid dans une feuille de calcul Excel ... http://tim.mackey.ie/HowtoExportADatasetToExcelCAspnet.aspx

1

Excel peut lire des tables HTML directement dans une feuille de calcul. Vous devez simplement envoyer les mêmes données affichées sur la page Web (moins les hyperliens, par exemple) avec un en-tête Content-Disposition défini sur attachment et un type mime approprié qui provoque l'ouverture du client par Excel. Excel lit ensuite le code HTML téléchargé dans une feuille de calcul.

1

Nous faisons cela dans quelques-unes de nos applications. Ce n'est vraiment pas difficile: Nous utilisons la même page aspx (nous lui envoyons un paramètre pour indiquer que nous voulons un fichier excel généré à partir de l'aspx), avec quelques lignes de code qui font que l'aspx est généré en fichier xls.

  1. Les premières lignes de code dans la méthode Page_Load devrait être:

    //open as excell file 
    Response.Buffer = true; 
    Response.ContentType = "application/vnd.ms-excel"; 
    string FileName = this.Page.ToString().Replace("ASP.", "") + ".xls"; // so the file can be saved as excel 
    Response.AppendHeader("content-disposition", "filename=\"" + FileName + "\";attachment"); 
    
  2. Il est important que dans ce mode, vous assurez-vous de désactiver ViewState. Sinon, il pourrait complètement confondre Excel et générer des erreurs.

C'est tout ce que nous faisons, et cela fonctionne à merveille.

Je dois ajouter que la recommandation de Microsoft est d'écrire le GridView dans un HtmlTextWriter lors de l'exportation vers Excel, afin de s'assurer que le HTML généré est celui que Excel comprendra.Il est facile à faire (sauf pour une exception qui est généré, mais il est facile à surmonter), et est expliqué bien dans ces 2 articles: Gridview Export to Excel et Extensive Study of GridView Export to Excel

+0

Salut si j'utilise la méthode ci-dessus je suis capable de télécharger un fichier Excel, mais le fichier Excel contient également le code HTML, qui est le code de conception pour les boutons et D'autres contrôles sont également téléchargés dans Excel. Comment éviter cela? – Jebli

+0

Bonjour, j'ai utilisé response.clear et le problème a été résolu. Maintenant, le problème est que j'utilise la pagination et que les données affichées sur l'écran ne sont téléchargées. mais je veux les données entières qui ont été liées à la vue de grille de données? – Jebli

+0

Pour éviter de télécharger excès HTML écrire un côté serveur conditionnel avant le HTML: <% if (excelState!) {De%>

...
<% } %> Quant à la pagination, vous pouvez désactiver la pagination avec une condition trop: si (excelState) { grdMappingAndForecast.AllowPaging = false; } –

Questions connexes