2011-10-13 5 views
2

J'exporte le contenu de SP pour exceller. L'une des colonnes affiche le format de date 08/2015, mais lors de l'exportation vers Excel, le format est modifié en août 2015.Exporter vers Excel perd le format de la date

J'ai fait un google sur le même et j'ai trouvé que l'inclusion du code ci-dessous fait l'affaire;

string style = @"<style> .text { mso-number-format:\@; } </style> "; 

L'exportation vers Excel (ensemble de données pour exceler) fonctionne ci-dessous;

/// <summary> 
    /// This method can be used for exporting data to excel from dataset 
    /// </summary> 
    /// <param name="dgrExport">System.Data.DataSet</param> 
    /// <param name="response">System.Web.Httpresponse</param> 
    public static void DataSetToExcel(System.Data.DataSet dtExport, System.Web.HttpResponse response, string strFileName) 
    { 

     string style = @"<style> .text { mso-number-format:\@; } </style> "; 

     //Clean up the response Object 
     response.Clear(); 
     response.Charset = ""; 

     //Set the respomse MIME type to excel 
     response.ContentType = "application/vnd.ms-excel"; 

     //Opens the attachment in new window 
     response.AddHeader("Content-Disposition", "attachment; filename=" + strFileName.ToString() + ".xls;"); 
     response.ContentEncoding = Encoding.Unicode; 
     response.BinaryWrite(Encoding.Unicode.GetPreamble()); 

     //Create a string writer 
     System.IO.StringWriter stringWrite = new System.IO.StringWriter(); 

     //Create an htmltextwriter which uses the stringwriter 
     System.Web.UI.HtmlTextWriter htmlWrite = new System.Web.UI.HtmlTextWriter(stringWrite); 

     //Instantiate the datagrid 

     System.Web.UI.WebControls.GridView dgrExport = new System.Web.UI.WebControls.GridView(); 

     //Set input datagrid to dataset table 
     dgrExport.DataSource = dtExport.Tables[0]; 

     //bind the data with datagrid 
     dgrExport.DataBind(); 

     //Make header text bold 
     dgrExport.HeaderStyle.Font.Bold = true; 

     //bind the modified datagrid 
     dgrExport.DataBind(); 

     //Tell the datagrid to render itself to our htmltextwriter 
     dgrExport.RenderControl(htmlWrite); 

     response.Write(style); 

     //Output the HTML 
     response.Write(stringWrite.ToString()); 

     response.End(); 
    } 

Où est-ce que je fais une erreur? s'il vous plaît guider!

Merci!

+0

Pas de commentaires ??? S'il vous plaît aider –

Répondre

0

Je ne comprends pas vraiment un peu le code (ne parle pas couramment asp.net) mais je dirai que si vous voulez forcer le texte dans une feuille excel vous devez définir la zone cible en tant que texte avant de mettre vos données là-bas.

Si ma compréhension du code est correct ceci:

response.Write(style); 

a besoin d'être avant cela.

dgrExport.RenderControl(htmlWrite); 

Edit: Peut-être une solution de rechange

Le bit de code Google que vous avez trouvé définit le format des cellules sous forme de texte. En toute probabilité vous voulez exceller pour traiter la date comme une date qui a un format d'affichage de MM/AAAA.

peut-être essayer de remplacer ceci:

string style = @"<style> .text { mso-number-format:\@; } </style> " 

avec

string style = @"<style> .text { mso-number-format:\mm/yyyy; } </style> " 

Je ne sais pas si/ou \ est un caractère d'échappement en ASP.net de sorte que le snytax exact peut être différent. En termes d'Excel, le format de nombre @ signifie que le texte et mm/aaaa signifiera une date avec le format d'affichage que vous voulez.

+0

même votre code modifié ne fonctionne pas! –

+0

J'ai ajouté quelque chose d'autre à essayer – Pynner

+0

en assignant un 'mettraient aussi la date au format correct –

2

Le problème n'est pas avec le format de date, Excel convertit les données selon DataType (Default is GENERAL) de CELL. Pour éviter la conversion de données, vous devez fournir le type de données (TEXT) avec les données.

vous avez utilisé le code correct, mais la feuille de style .text n'est pas appliquée sur vos données. Appliquez la feuille de style sur TOUS les tags <TD>. Il fonctionnera à 100% et conservera vos données comme vous le ferez (Date- 08/2015, 0001 or any data).

string style = @"<style> TD { mso-number-format:\@; } </style> "; 
+0

Smith, Ajout de' va changer vos données d'origine. Avez-vous essayé le code ci-dessus? –

+0

Oui .... string style = @ ""; Travailler parfaitement bien – hks

1

Voici un exemple de code.

Response.AddHeader("content-disposition", "attachment; filename=Report.xls"); 
Response.Charset = ""; 
Response.ContentType = "application/vnd.xls"; 
System.IO.StringWriter stringWrite = new System.IO.StringWriter(); 
System.Web.UI.HtmlTextWriter htmlWrite = new HtmlTextWriter(stringWrite); 
DataGrid g = new DataGrid(); 
DataTable d = new System.Data.DataTable(); 
d = (DataTable)Session["ReportData"];   
g.DataSource = d; 
g.DataBind();  
foreach (DataGridItem i in g.Items) 
{ 
    foreach (TableCell tc in i.Cells) 
     tc.Attributes.Add("class", "text"); 
} 
g.RenderControl(htmlWrite); 
string style = @"<style> .text { mso-number-format:\@; } </style> "; 
Response.Write(style); 
Response.Write(stringWrite.ToString()); 
Response.End();