Bonjour à tous,

J’utilise un bout de code PHP qui fonctionne très bien pour exporter des données de ma table SQL vers un nouveau fichier EXCEL (csv).
<?php
//////////////////////////////////////////////////////////////
$chainetabexcel= "'" . implode("','", $_POST['options']) . "'";
$lieu = "tableau_comptable";
//////////////////////////////////////////////////////////////
$requettableauexcel = 'SELECT * FROM cheque_adh
WHERE cle_chq IN ('.$chainetabexcel.') ORDER BY nom_chq ';
$requettableauexcelresultat = $mysqli->query($requettableauexcel) or die ('Erreur '.$requettableauexcel.' '.$mysqli->error);
//////////////////////////////////////////////////////////////
header("Content-type: application/vnd.ms-excel");
header("Content-disposition: attachment; filename=" . $lieu.".csv");
//Premiere ligne = nom des champs
$csv_output .= "$lieu";
$csv_output .= "\n";
$csv_output .= "Nom;Date;Numero;Banque;Montant";
$csv_output .= "\n";
//la boucle
while ($bouclerter = $requettableauexcelresultat->fetch_array()){
	$csv_output .= $bouclerter[nom_chq] .";";
	$csv_output .= $bouclerter[date_chq] .";"; 
	$csv_output .= $bouclerter[num_chq] .";";
	$csv_output .= $bouclerter[banque_chq] .";";
	$csv_output .= $bouclerter[montant_chq] .";";
	$csv_output .= "\n";
	}
print $csv_output;
exit;
?>

J’aimerais améliorer le résultat du tableau soit en formatant automatiquement les cellules EXCEL (taille, couleur, bordure) avant de copier les données soit en ouvrant un fichier existant sur mon serveur ou les colonnes et les entêtes sont déjà formatés puis copier les données dedans.
Avez-vous SVP un bout de code une idée à me donner, ça fait plusieurs jours que je cherche une solution.

Merci de votre aide,
Bon dimanche à tous
Un csv ne permet aucun formatage graphique. C'est un fichier texte que tu peux effectivement ouvrir avec des tableurs mais ce n'est pas un format spécifique à excel.
bzh a écrit :
Un csv ne permet aucun formatage graphique. C'est un fichier texte que tu peux effectivement ouvrir avec des tableurs mais ce n'est pas un format spécifique à excel.

Tout à fait...
Sous Java / Servlet on se sert de librairies spécialisées telles qu'Apache POI pour créer ex nihilo des feuilles CVS au format Excel pour ajouter des styles aux cellules.
Suis pas spécialiste PHP, mais après recherche sur le ouaibe il semble qu'il existe quelques librairies PHP qui pourraient correspondre à ton besoin, dont PHP Excel.
Je ne sais pas ce que ça vaut exactement, mais si cela peut correspondre, fais un tour sur le site en question pour te faire une idée.
Effectivement PHP Excel est très pratique. Les exemples fournis sont une bonne base.

Si tu butes un peu, je pourrais te passer quelques bouts de codes.
Bonjour à tous,

Vraiment merci à vous trois, effectivement PHPExcel fonctionne parfaitement, j'arrive à faire un fichier excel (xls, xlsx), modifier les cellules, vraiment au top.

Maintenant il faut que change ma boucle et la je bloque !!

$nombre = $requettableauexcelresultat->num_rows;
$bouclerter = $requettableauexcelresultat->fetch_array();
for ($i = 3; $i <= $nombre; $i++) {
	$objPHPExcel->getActiveSheet()->setCellValue('A' . $i, "$bouclerter[nom_chq]")
	                              ->setCellValue('B' . $i, "$bouclerter[date_chq]")
	                              ->setCellValue('C' . $i, "$bouclerter[num_chq]")
	                              ->setCellValue('D' . $i, "$bouclerter[banque_chq]")
	                              ->setCellValue('E' . $i, "$bouclerter[montant_chq]");
}


Je n'ai que la première ligne de ma requête qui s'affiche.

Bon lundi à tous
Modifié par pandademios (22 Aug 2016 - 10:58)
Salut,

$nombre = $requettableauexcelresultat->num_rows;
$bouclerter = $requettableauexcelresultat->fetch_array();
for ($i = 3; $i <= $nombre; $i++) {
	$objPHPExcel->getActiveSheet()->setCellValue('A' . $i, "$bouclerter[nom_chq]"),
	                              ->setCellValue('B' . $i, "$bouclerter[date_chq]"),
	                              ->setCellValue('C' . $i, "$bouclerter[num_chq]"),
	                              ->setCellValue('D' . $i, "$bouclerter[banque_chq]"),
	                              ->setCellValue('E' . $i, "$bouclerter[montant_chq]");
}


avec les , c'est mieux non ?
Bonjour SuperMerguez

Non cela provoque l'erreur suivante :
Parse error: syntax error, unexpected ',' in C:\Program Files (x86)\EasyPHP-DevServer-14.1VC9\data\localweb\projects\PHP Excel\Examples\00aatestimportexcelinclude.php on line 31

Modifié par pandademios (22 Aug 2016 - 11:46)
Bonjour,

Selon ce tutoriel (Code-Usage.com - PHPExcel (en anglais)), il faille définir $objPHPExcel->setActiveSheetIndex($i) avant $objPHPExcel->getActiveSheet().

La syntaxe sans les virgules est correcte, le couple '->' sert de délimiteur.

Bonne journée. Smiley smile
Modifié par Greg_Lumiere (22 Aug 2016 - 11:57)
pandademios a écrit :
Bonjour SuperMerguez

Non cela provoque l'erreur suivante :
Parse error: syntax error, unexpected ',' in C:\Program Files (x86)\EasyPHP-DevServer-14.1VC9\data\localweb\projects\PHP Excel\Examples\00aatestimportexcelinclude.php on line 31


Désolé je suis une burne avec php Smiley lol
C'est bon j'ai une solution

$nombre = $requettableauexcelresultat->num_rows;
for ($i = 3; $i <= $nombre+3; $i++) {
	$bouclerter = $requettableauexcelresultat->fetch_array();
	$objPHPExcel->getActiveSheet()->setCellValue('A' . $i, "$bouclerter[nom_chq]")
	                              ->setCellValue('B' . $i, "$bouclerter[date_chq]")
	                              ->setCellValue('C' . $i, "$bouclerter[num_chq]")
	                              ->setCellValue('D' . $i, "$bouclerter[banque_chq]")
	                              ->setCellValue('E' . $i, "$bouclerter[montant_chq]");							  
}


Encore merci à tous
Re bonjour à tous,

Quand j'exporte un numéro de téléphone avec PHPexcel, il apparaît sans le zéro du début dans EXCEL.

Avez-vous une idée de la classe nécessaire au formatage de la cellule pour faire apparaître le zéro

Merci encore de votre aide
pandademios a écrit :
Re bonjour à tous,
Quand j'exporte un numéro de téléphone avec PHPexcel, il apparaît sans le zéro du début dans EXCEL.
Avez-vous une idée de la classe nécessaire au formatage de la cellule pour faire apparaître le zéro
Merci encore de votre aide

A priori, je dirais que c'est un problème de détection du type de données par Excel...
Si la valeur passée dans la cellule en tant que n° de téléphone ne contient que des chiffres, Excel va fort logiquement l'enregistrer comme du numérique.
Je ne connais pas PHP Excel, mais en général dans ce genre de situation on encadre la valeur par deux guillemets (anglais) pour forcer la reconnaissance en tant que chaîne alphanumérique.
Sous Apache POI, c'est en tout cas ainsi que je procède lorsque je veux porter du CVS vers Excel.