Partage
  • Partager sur Facebook
  • Partager sur Twitter

Saut de ligne dans cellule Excel (en PHP)

Syntaxe PHP saut de ligne pour Excel

    23 avril 2014 à 16:30:42

    Bonjour à tous ! 

    J'ai créer un bouton )"exporter vers Excel") qui permet de transférer les données d'un tableau php vers Excel. Rien à signaler de ce côté, l'export fonctionne correctement.

    Cependant, certaines cellules de mon tableau comportent plusieurs données qui doivent s'afficher les unes en dessous des autres.

    Pour mon tableau php, un simple <br /> entre chaque donnée permet d'avoir le rendu souhaité.

    Mais lors de l'export vers Excel, je me retrouve avec des <br /> apparent entre chaque données dans mon tableur Excel (et c'est normal) :p

    Tout d'abord, pour les supprimer j'ai utilisé :

    <?php
    {
     $result6 = $donnees['Quantite'];
     $result7 = $donnees['Reference'];
     $result8 = $donnees['Designation'];
     $result9 = $donnees['PU'];
     $result10 = $donnees['Montant']
    }
     $result6 = str_replace("<br />","",$result6);
     $result7 = str_replace("<br />","",$result7);
     $result8 = str_replace("<br />","",$result8);
     $result9 = str_replace("<br />","",$result9);
     $result10 = str_replace("<br />","",$result10);
    ?>

    Or, si je veux avoir un rendu similaire dans Excel, il me faut (en plus de les supprimer) un saut de ligne (dans la même cellule). 

    J'ai essayé de nombreuses possibilités :

    • "&#10;"
    • CAR(10)
    • CAR(13)
    • chr(10)
    • "\n"
    • "\t"
    • "\r"
    • "\n\r"
    • LF
    • CRLF

    Rien ne convient à ce que j'attend car ces solutions changent de cellule. 

    J'ai également essayé avec :

    $objPHPExcel = new PHPExcel();
    
    $objPHPExcel->getProperties();
    $sheet = $objPHPExcel->getActiveSheet();
    
    //- saut a la ligne dans une cellule
    $objPHPExcel->getActiveSheet()
    ->setCellValue('F2', "\r"); 
    $objPHPExcel->getActiveSheet()->getStyle('F2')
    ->getAlignment()->setWrapText(true);

    Avec un include de la librairie PHPExcel, mais rien de semble fonctionner >_<

    Donc si quelqu'un à une idée pour régler mon problème, je lui en serait très reconnaissant.

    Merci d'avance ;)

    -
    Edité par Divide 24 avril 2014 à 15:07:29

    • Partager sur Facebook
    • Partager sur Twitter
      24 avril 2014 à 11:39:40

      J'ai effectué moi-même manuellement les retour à la ligne dans mes cellules (ALT + ENTRER), sous Excel. J'ai ensuite enregistrer au format .CSV et j'ai ouvert le fichier avec un éditeur de texte (Notepad++).

      Le code du retour à la ligne est : &#0A

      J'ai donc fait : 

      $result6 = str_replace("<br />","&#0A;",$result6);
      $result7 = str_replace("<br />","&#0A;",$result7);
      $result8 = str_replace("<br />","&#0A;",$result8);
      $result9 = str_replace("<br />","&#0A;",$result9);
      $result10 = str_replace("<br />","&#0A;",$result10);


       
      Mais voilà le résultat... :

       

      Les données passent à la cellule suivante (et ne se mettent pas les unes en dessous des autres.)

      Et en plus, il me garde le code : &#0A.

      Mais pour ça rien de méchant, il suffit de faire un second str_replace des données.

      Bref, ce que je souhaiterais avoir c'est ceci : 

       

      Quelqu'un pour m'aider svp ?  :-°

      Merci.

      -
      Edité par Divide 24 avril 2014 à 11:59:58

      • Partager sur Facebook
      • Partager sur Twitter
        25 avril 2014 à 14:18:48

        Vraiment personne ? :( 

        • Partager sur Facebook
        • Partager sur Twitter
          25 avril 2014 à 14:22:51

          Bonjour,

          As-tu essayé avec des simples balises de <table> (et donc <tr> <td>) html ?

          • Partager sur Facebook
          • Partager sur Twitter
            28 avril 2014 à 11:25:43

            Bonjour,

            Malheureusement, Excel n'interprète pas les balises HTML.  

            Je n'ai toujours pas trouvé de solutions à ce jour.

            Merci tout de même ;)

            • Partager sur Facebook
            • Partager sur Twitter
              30 avril 2014 à 14:17:46

              Bonjour,

              J'ai un peu le même problème que toi mais qui fonctionne plus ou moins.

              Pour ma part, j'insère du texte qui contient un retour à la ligne dans ma cellule .

              Au niveau du résultat, tout est dans la même cellule, sauf que le retour à la ligne ne s'affiche pas (il n'y a même pas d'espace).

              Pour que le retour à la ligne soit pris en compte, je dois double cliquer dans la cellule puis cliquer ailleurs, et là mon retour à la ligne est pris en compte (sans l'avoir rajouter à la main avant).

              Voici comment je fais mon insertion :

              $sheet->setCellValueExplicitByColumnAndRow($col, $row, $txt1."\n".$txt2);
              // redimensionner la hauteur de la cellule en automatique
              $sheet->getRowDimension($row)->setRowHeight(-1);
              

              Vois si ça marche pour toi.

              Et si quelqu'un à une idée pour que le retour à la ligne soit pris en compte à l'ouverture du fichier, n'hésitez pas !

              Merci.

              • Partager sur Facebook
              • Partager sur Twitter
                13 mai 2014 à 11:38:54

                Désolé de répondre si tard.

                Je n'ai personnellement aucun problème avec Excel et les balises de table.

                La page est-elle bien ouverte avec un entête spécifique ? Du type :

                header("content-type: application/vnd.ms-excel");
                header("content-disposition: attachment; filename=essai.xls");
                



                -
                Edité par philodick 13 mai 2014 à 11:40:35

                • Partager sur Facebook
                • Partager sur Twitter
                  19 mai 2014 à 14:59:04

                  Bonjour,

                  Désolé à mon tour de répondre un peu tard. 

                  Oui, ma page s'ouvre bien avec cet entête, donc je ne vois pas d'où peut venir le problème... :/ 

                  function output($NomFichier)
                  {
                    header("Content-type: application/vnd.ms-excel");
                    header("Content-disposition: attachment; filename=$NomFichier.csv");
                    print $this->csv;
                    exit;
                  }


                  Merci à toi,

                  Cordialement,

                  • Partager sur Facebook
                  • Partager sur Twitter
                    28 septembre 2015 à 19:07:57

                    Réponse tardive mais ça peut encore aider.

                    Ce qui marche chez moi :

                     \t\r

                    Jo

                    -
                    Edité par Diaoulig 28 septembre 2015 à 19:09:15

                    • Partager sur Facebook
                    • Partager sur Twitter
                      27 juillet 2017 à 16:14:52

                      Pour ceux qui passent là par hasard, personnellement cette solution marche :

                      $objPHPExcel->getActiveSheet()->getStyle('A1')->getAlignment()->setWrapText(true);

                      Et comme chaine de retour à la ligne :

                      "\n"




                      • Partager sur Facebook
                      • Partager sur Twitter

                      Saut de ligne dans cellule Excel (en PHP)

                      × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
                      × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
                      • Editeur
                      • Markdown