saut de ligne dans un excel créé en php - PHP - Programmation
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. |
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"
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 ?
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 />.
Marsh Posté le 12-06-2007 à 15:34:40
Salut j'ai trouvé la solution :
$nouveau_texte=str_replace("\n"," ",$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
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) !
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 ;
}}
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 ?