saut de ligne dans un excel créé en php

saut de ligne dans un excel créé en php - PHP - Programmation

Marsh Posté le 22-02-2006 à 08:34:07    

Bonjour à tous.
Voici mon problème :
En php, je récupère le contenu d'une table mysql, je crée un tableau html avec ce contenu. Je mets le type mime excel.
Le tableau s'ouvre dans le navigateur en Excel.
Le problème : les sauts de ligne en php sont \n mais excel ne les interprete pas.
Je cherche un moyen de remplacer \n par des sauts de ligne excel.
J'ai déjà testé :
 - remplacer \n par <br> ou <br/> : ça crée une sous cellule (sans bordure) pour chaque <br>, mais je voudrais l'affichage dans une seule cellule donc ça ne marche pas
 - remplacer \n par CAR(10) : apparemment, CAR(10) ne fonctionne que dans les formules, or là, il faut mettre le saut de ligne directement dans la cellule.
 
En gros, je voudrais faire des "alt-entrée", mais dans le code, à partir de php...
Quelqu'un aurait une idée ?

Reply

Marsh Posté le 22-02-2006 à 08:34:07   

Reply

Marsh Posté le 22-02-2006 à 11:12:13    

domri64 a écrit :

En php, je récupère le contenu d'une table mysql, je crée un tableau html avec ce contenu. Je mets le type mime excel.
Le tableau s'ouvre dans le navigateur en Excel.

ha, excel peut lire un tableau html ?
sinon j'ai eu ce problème en csv, et je l'ai résolu avec \n + délimiteurs : par exemple "blablabla\nblabla"
 

Reply

Marsh Posté le 22-02-2006 à 11:29:12    

Excel sait lire et créer du html, oui. Donc il est à priori facile d'écrire un tableau html et de l'ouvrir dans Excel.
Sauf que les \n, \r, \n\r, etc. ne sont pas interpretés par Excel (en csv oui, mais y'a pas de formatage).
La seule solution que j'ai trouvé consiste à remplacer les \n par des <br>, mais le résultat est pas terrible (essayez de créer un tableau multiligne en html, dans les cellules, mettez du texte avec des <br>, et ouvrez ça dans excel, vous verrez le résultat)
On peut aussi faire une concaténation en remplaçant les \n par CAR(10) : =CONCATENER("montexte";CAR(10);"lasuitedemontexte" ) mais cette solution a des limites (mes cellules contiennent parfois plus de 2000 caracteres, ça ne passe pas en concaténation).
Le problème, comme je le dis sans mon premier message, est que CAR(10) ne fonctionne apparemment que dans les formules, pas dans la cellule elle-meme.
En PHP, j'ai ça :  
$mavariable=str_replace("\n", "quelquechose", $mavariable) où il faudrait remplacer "quelquechose" par un code qui permette d'afficher $mavariable dans une cellule excel avec les sauts de ligne. (pas "\n", "\r", "\n\r", "<br>", "<br/>", "CAR(10)" ), du moins pas sous cette forme, ça ne marche pas.
Y'a vraiment aucune solution ?


Message édité par domri64 le 22-02-2006 à 11:31:21
Reply

Marsh Posté le 04-01-2007 à 16:43:40    

Essaie :
 
<style type="text/css">  
  br {mso-data-placement: same-cell}  
</style>
 
combiné avec un str_replace de \n vers <br />.

Reply

Marsh Posté le 12-06-2007 à 15:34:40    

Salut j'ai trouvé la solution :
 
$nouveau_texte=str_replace("\n","&#10;",$ancien_texte);
 
Ps : pour generer de l'excel via PHP, utiliser le format XML d'excel (enregistrer sous ->XML). Y'a pas mal de doc sur le sujet, bon courage. Michel

Reply

Marsh Posté le 12-06-2007 à 15:40:57    

et t'as essayé avec CAR(13)?

Reply

Marsh Posté le 29-08-2007 à 18:39:19    

il suffit d'utiliser la fonction chr() en passant le code du retour chariot en ASCII, soit chr(10) !


Message édité par bert011 le 29-08-2007 à 18:39:40
Reply

Marsh Posté le 15-04-2012 à 07:07:18    

l'idée est de travailler sur différent cas si la longueur de la chaine est superieur a 90 caractere nous devons agrandir la case  
 
un morceau de code ^^  
 
$cell=$sheet->Range('A29')->RowHeight = 35.0 ;
  $cell=$sheet->Range('A29');
  $longueurdonnéeactivite=strlen($_GET['Iactivite']);
        $cell->value="Activité : \n".$_GET['Iactivite'];
  if ($longueurdonnéeactivite<60){$cell->value="Activité : ".$_GET['Iactivite'];}
  else{
  $cell->value="Activité : \n".$_GET['Iactivite'];
  if($longueurdonnéeactivite>60 and $longueurdonnéeactivite<180){  
  $cell=$sheet->Range('A29')->RowHeight = 50.0 ;  
  }
  if($longueurdonnéeactivite>180 and $longueurdonnéeactivite<270){  
  $cell=$sheet->Range('A29')->RowHeight = 75.0 ;  
  }
  if($longueurdonnéeactivite>270 and $longueurdonnéeactivite<360){  
  $cell=$sheet->Range('A29')->RowHeight = 100.0 ;  
  }}

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed