IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

ASP.NET Discussion :

Formatter le datagrid pour que les accents passent sous excel


Sujet :

ASP.NET

  1. #1
    Membre régulier
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    161
    Détails du profil
    Informations personnelles :
    Localisation : France, Isère (Rhône Alpes)

    Informations forums :
    Inscription : Avril 2006
    Messages : 161
    Points : 77
    Points
    77
    Par défaut Formatter le datagrid pour que les accents passent sous excel
    Bonjour,
    J'exporte mon datagrid dans un fichier excel mais le problème est que les accents ne passent pas sous excel. J'ai pris une fonction trouvé sur internet mais qui ne marche pas

    Lorsque je lance cette fonction avec mon datagrid en param j'ai une erreur du type :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    La collection Controls ne peut pas être modifiée, car le contrôle contient des blocs de code (c'est-à-dire <% ... %>).
    voila le code de la fonction avec la ligne qui renvoie l'erreur en gras :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    private void verifColonne(Control monDataGrid)
    		{
    			//On récupère le nombre de controles enfants composant le DataGrid
    			int nbControls = monDataGrid.Controls.Count - 1;
    
    			while (nbControls >= 0){
    				verifColonne(monDataGrid.Controls[nbControls]);
    				nbControls = nbControls - 1;
    			}
    
    
    			//Si la cellule ne contient pas du texte simple 
    			if (!(monDataGrid is TableCell)){
    
    				//Si le controle concerné à une prorpiété "Selected Item" alors...
    				//Remarque : Seul les controles offrant des choix multiples ont une propriété "SelectedItem"
    				if( monDataGrid.GetType().GetProperty("SelectedItem")!= null)
    				{
    
    					LiteralControl controleLitteral1 = new LiteralControl();
    					monDataGrid.Parent.Controls.Add(controleLitteral1);
    					try
    					{
    						//La cellule prend alors pour valeur le texte correspondant à la propriété "SelectedItem"
    						controleLitteral1.Text = (string)monDataGrid.GetType().GetProperty("SelectedItem").GetValue(monDataGrid, null);
    					}
    					catch (Exception monException)
    					{
    						//On récupère l'exception en cas de problème
    						Response.Write(monException.Message);
    					}
    
    					//Le controle concerné est retiré
    					monDataGrid.Parent.Controls.Remove(monDataGrid);
    
    				}
    				else
    				{
    
    					// Si le controle concerné n'a pas de propriété "SelectedItem" alors on récupère le 
    					// texte (s'il y en a un) de sa propriété "Text"
    					if ((monDataGrid.GetType().GetProperty("Text") != null))
    					{
    
    						LiteralControl controleLitteral2 = new LiteralControl();
    						monDataGrid.Parent.Controls.Add(controleLitteral2);
    						// On attribue le texte de la propriété "Text" à la cellule concernée
    						controleLitteral2.Text = (string)monDataGrid.GetType().GetProperty("Text").GetValue(monDataGrid, null);
    						monDataGrid.Parent.Controls.Remove(monDataGrid);
    
    					}
    
    
    				}
    
    
    			}
    Si vous avez une idée de comment faire pour corriger cette fonction ou si vous avez un autre moyen de formatter mon datagrid pour qu'il s'exporte sous excel, n'hesitez pas.

    Merci de vos réponses.

  2. #2
    Membre actif
    Inscrit en
    Janvier 2005
    Messages
    218
    Détails du profil
    Informations forums :
    Inscription : Janvier 2005
    Messages : 218
    Points : 247
    Points
    247
    Par défaut
    Il faut peut etre définir un encodage différent....type windows 1252 ou utf8 ?!

  3. #3
    Membre régulier
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    161
    Détails du profil
    Informations personnelles :
    Localisation : France, Isère (Rhône Alpes)

    Informations forums :
    Inscription : Avril 2006
    Messages : 161
    Points : 77
    Points
    77
    Par défaut
    J'ai essayer de définir d'autre encodage lorsque j'exporte le datagrid :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    public static void ExportDataSetToExcel(DataSet ds, string filename)
    		{
    			HttpResponse response = HttpContext.Current.Response;
       
    			// first let's clean up the response.object
    			response.Clear();
    			response.Charset = "";
       
    			// set the response mime type for excel
    			response.ContentType = "application/vnd.ms-excel; charset=iso-8859-1";
    			response.AddHeader("Content-Disposition", "attachment;filename=\"" + filename + "\"");
       
    			// create a string writer
    			using (StringWriter sw = new StringWriter())
    			{
    				using (HtmlTextWriter htw = new HtmlTextWriter(sw))
    				{
    					// instantiate a datagrid
    					DataGrid dg = new DataGrid();
    					dg.DataSource = ds.Tables[0];
    					dg.DataBind();
    					dg.RenderControl(htw);
    					response.Write(sw.ToString());
    					response.End(); 
    				}
    			}
    		}
    Dans response.charset= "" j'ai mis tout les encodage que tu a cité plus iso-8859-1 car ma page web est encodé comme celé et les accents sont bien affichés. Mais le fichier excel me sort toujours des accents mal formaté.

    J'ai egalement tester de le mettre dans response.content-type et ca ne marche toujours pas.

    Edit : J'ai fait une grosse erreur, cette fonction n'est pas appeler dans mon programme, j'ai telecharger beaucoup de fonction et j'ai fait une petite confusion, excusez moi, je vais tester le charset dans la fonction d'export que j'utilise !!!!

  4. #4
    Membre actif
    Inscrit en
    Janvier 2005
    Messages
    218
    Détails du profil
    Informations forums :
    Inscription : Janvier 2005
    Messages : 218
    Points : 247
    Points
    247
    Par défaut
    Essaye ca : Response.ContentType = "text/html"

  5. #5
    Membre régulier
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    161
    Détails du profil
    Informations personnelles :
    Localisation : France, Isère (Rhône Alpes)

    Informations forums :
    Inscription : Avril 2006
    Messages : 161
    Points : 77
    Points
    77
    Par défaut
    La bonne fonction que j'appele pour exporter est celle ci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    public virtual void Export(string reportName)
    		{
    			ClearChildControls(MyDataGrid);
    			MyDataGrid.EnableViewState = false;//Gets rid of the viewstate of the control. The viewstate may make an excel file unreadable.
    
    		
    			//CurrentPage.
    				HttpContext.Current.Response.Clear();
    			//CurrentPage.
    				HttpContext.Current.Response.Buffer = true; 
    
    			//This will make the browser interpret the output as an Excel file
    			//CurrentPage.Response.AddHeader( "Content-Disposition", "filename="+reportName);
    			HttpContext.Current.Response.AddHeader("Content-Disposition", "attachment;filename=\"" + reportName + "\"");
    
    			//CurrentPage.
    				HttpContext.Current.Response.ContentType="application/vnd.ms-excel; text/html ";
    			HttpContext.Current.Response.Charset="charset=iso-8859-1";
    
    			//Prepares the html and write it into a StringWriter
    			StringWriter stringWriter = new StringWriter();
    			HtmlTextWriter htmlWriter = new HtmlTextWriter(stringWriter);
    			FrontDecorator(htmlWriter);
    			MyDataGrid.RenderControl(htmlWriter);
    			RearDecorator(htmlWriter);
    
    			//Write the content to the web browser
    			//CurrentPage.
    				HttpContext.Current.Response.Write(stringWriter.ToString());
    			//CurrentPage.
    				HttpContext.Current.Response.End();
    		}
    J'ai bien essayé le html/text, et plein d'autre encodage mais ca ne change rien

  6. #6
    Membre actif
    Inscrit en
    Janvier 2005
    Messages
    218
    Détails du profil
    Informations forums :
    Inscription : Janvier 2005
    Messages : 218
    Points : 247
    Points
    247

  7. #7
    Membre régulier
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    161
    Détails du profil
    Informations personnelles :
    Localisation : France, Isère (Rhône Alpes)

    Informations forums :
    Inscription : Avril 2006
    Messages : 161
    Points : 77
    Points
    77
    Par défaut
    Citation Envoyé par GrosseVache
    En fait dans ce post il utilise un stringwriter pour que l'encodage se fasse bien,
    mais c'est déjà ce que je fait.
    Je suis quasi-sûr que hier soir quand j'ai fini ma fonction, les accents etait bien encodé, je n'est plus touché a cette fonction donc je vais essayé de cherché ailleurs, peu être que le buffer n'est pas bien vidé, je crois que je vais avoir du mal a trouvé l'erreur.
    Merci de ton aide quand même

  8. #8
    Membre régulier
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    161
    Détails du profil
    Informations personnelles :
    Localisation : France, Isère (Rhône Alpes)

    Informations forums :
    Inscription : Avril 2006
    Messages : 161
    Points : 77
    Points
    77
    Par défaut
    C'est bon , c'est résolu j'ai rajouter la ligne suivante :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    HttpContext.Current.Response.ContentEncoding = System.Text.Encoding.Default;
    C'etait bien l'encodage qu'il fallait changer mais j'utiliser la mauvaise fonction pour le changer. La solution est toute bête mais c'est souvent comme ca après avoir trouvé!!
    Et ca marche nickel maintenant

    Merci de ton aide

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [MySQL] Code php pour exporter les données mysql sous Excel
    Par le maire dans le forum PHP & Base de données
    Réponses: 5
    Dernier message: 24/09/2014, 15h20
  2. [XL-2003] adresse variable pour importer les données txt sous excel
    Par renfei1984 dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 02/07/2010, 10h29
  3. Fonction pour effacer les accents
    Par repié dans le forum Oracle
    Réponses: 6
    Dernier message: 25/08/2006, 14h53
  4. Script pour imprimer les accents ?
    Par sperron dans le forum ASP
    Réponses: 12
    Dernier message: 12/06/2006, 20h55
  5. [FoxPro]Instruction pour enlever les accents ?
    Par Fab-FoxPro dans le forum Autres SGBD
    Réponses: 2
    Dernier message: 19/08/2003, 15h46

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo