2010-11-15 5 views
0

Duplicate possible:
Create Excel (.XLS and .XLSX) file from C#Générer Excel Feuille de calcul CSV (ASP.NET C#)

J'ai un code qui génère un fichier zip qui contient plusieurs fichiers CSV et les flux de retour à l'utilisateur (aucun fichier n'est sauvegardé sur le serveur). Cependant, je veux créer un classeur Excel (au format xls traditionnel ou au format xlsx Office Open XML), chaque fichier CSV étant une feuille de calcul.

Comment puis-je faire cela, sans recourir à Office Automation sur le serveur ou un composant tiers commercial?

+0

possible de duper http://stackoverflow.com/questions/151005/create-excel-xls-and-xlsx-file-from-c – hjd

Répondre

0

Vous pouvez utiliser OleDB pour générer des tableaux simples dans des fichiers Excel.

Notez que vous devrez générer un fichier temporaire sur le serveur.

Example.

Notez que leur exemple est incorrect et a besoin d'utiliser un OleDbConnectionStringBuilder, comme ceci:

OleDbConnectionStringBuilder builder = new OleDbConnectionStringBuilder(); 

if (isOpenXML) 
    builder.Provider = "Microsoft.ACE.OLEDB.12.0"; 
else 
    builder.Provider = "Microsoft.Jet.OLEDB.4.0"; 

builder.DataSource = fileName; 
builder["Extended Properties"] = "Extended Properties=\"Excel 8.0;HDR=YES;\"" 

using (var con = new OleDbConnection(builder.ToString())) { 
    ... 
} 
0
 Response.ContentType = "application/vnd.ms-excel"; 

La propriété ContentType spécifie le type de contenu HTTP pour la réponse. Si aucun ContentType n'est spécifié, la valeur par défaut est text/HTML.

Obtenez toutes vos données dans un DataGrid puis l'obtenir de celui-ci peut se faire avec:

DataGrid.RenderControl 

Sorties contenu de contrôle du serveur à un fourni HtmlTextWriter objet et stocke des informations de traçage sur le contrôle si le traçage est activé.

 SqlConnection cn = new SqlConnection("yourconnectionstring"); 
     cn.Open(); 
     SqlDataAdapter da = new SqlDataAdapter("SELECT * FROM Users", cn); 
     DataTable dt = new DataTable(); 
     da.Fill(dt); 
     DataGrid dg = new DataGrid(); 
     dg.DataSource = dt; 
     dg.DataBind(); 

     System.IO.StringWriter tw = new System.IO.StringWriter(); 
     System.Web.UI.HtmlTextWriter hw = new System.Web.UI.HtmlTextWriter(tw); 

     dg.RenderControl(hw); 
     cn.Close(); 

     Response.Clear(); 
     Response.ContentType = "application/vnd.ms-excel"; 
     this.EnableViewState = false; 
     Response.Write(tw.ToString()); 
     Response.End(); 
Questions connexes