Page 1 sur 1

Ajout onglet dans export excel via php

Posté : 21 nov. 2016, 17:58
par orell1
Bonjour à tous,

j'utilise ce bout de code pour exporter mes données sql vers un fichier excel...
////////////////////////////////////////////////////////////////////////////////////////
//
//     FONCTION REALISANT LA REDIRECTION DE L'AFFICHAGE PHP VERS UN FICHIER EXCEL     //
//
////////////////////////////////////////////////////////////////////////////////////////
//
// fonction de gestion du buffer d'affichage redirig� par ob_end_flush()
function enregistrer_sous_excel($buffer)
{
  // enregistre l'affichage dans un fichier Excel
  file_put_contents ("exportation_opportunites/opportunite.xls", $buffer);
  // affiche le r�sultat sur le navigateur client
  return "
   <meta charset='UTF-8'> 
  <table width=\"100%\" border=\"0\" cellpadding=\"0\" cellspacing=\"0\" style=\"padding:30px;\">
  <tr>
    <td width=\"300\" valign=\"middle\"  align=\"center\" style=\"font-weight:bold;\">Cliquez sur l'image pour t&eacute;l&eacute;charger : </td>
    <td valign=\"middle\"><a href=\"exportation_opportunites/opportunite.xls\"><img src=\"images/excel.png\" alt=\"Téléchagement des inscriptions\"></a></td>
  </tr>
</table>";
}
// redirection de l'affichage vers la fonction d�sign�e
ob_start('enregistrer_sous_excel');
Aujourd'hui j'aurai besoin d'ajouter 2 onglets supplémentaires sur cette même page excel.
Avez-vous une idée svp de comment faire ?

Merci beaucoup pour votre aide.

Cordialement,

Re: Ajout onglet dans export excel via php

Posté : 21 nov. 2016, 18:17
par moogli
salut,

le bout de code permet, a priori, l'envoi d'un bout de html avec un lien pour dl le fichier, rien à voir avec la génération du fichier lui même.

@+

Re: Ajout onglet dans export excel via php

Posté : 21 nov. 2016, 18:24
par orell1
oui ok.
Les actions suivantes sont :



// connexion �  la base de donn�es
 $conn = db_connect();

// cr�er la liste des membres
$listeMembres = "" ; 
$listeContractes = "" ; 
$listeAbandonnees = ""; 
$listeEvolutionOppy = ""; 



	$listeAbandonnees .= "<tr>
<td>".utf8_encode($row['num_opportunite'])."</td>
<td>".utf8_encode(strtoupper($row['entite']))."</td>
<td>".utf8_encode($row['contact_client'])."</td>
<td>".utf8_encode($row['nom_opportunite'])."</td>
<td>".utf8_encode(htmlentities($row['ligne_service_1']))."</td>
<td>".utf8_encode(htmlentities($row['quadri_courtier']))."</td>
<td>".utf8_encode(htmlentities($row['raison_perdue']))."</td>";

// fin de connexion
mysql_close();
// affichage de la liste des membres sous forme d'une tableau HTML

<table>
<tr> <th style="text-align:left;font-size:18px;color:#999;" colspan="10">OPPORTUNITES <?php echo $choix_date_debut; ?></th> </tr>
</table>
<table border="1" cellpadding="0" cellspacing="10">
<tr  class="test" >
<th style="background-color:rgb(219,23,2);">N&deg;</th>
<th style="background-color:rgb(219,23,2);">Client/Prospect</th>
<th style="background-color:rgb(219,23,2);">Contact</th>
<th style="background-color:rgb(219,23,2);">Nom de l'opportunit&eacute;</th>
<th style="background-color:rgb(219,23,2);">Ligne de Service 1</th>
<th style="background-color:rgb(219,23,2);">Commercial</th>
<th style="background-color:rgb(219,23,2);">Raison</th>
</tr>

<?php 	echo $listeAbandonnees; ?>
</table>
</body>
</html>

<?php
///////////////////////////////////////////////////////////////////////////////
//
//     FONCTION FINALE DECLENCHANT LA REDIRECTION DE L'AFFICHAGE             //
//
///////////////////////////////////////////////////////////////////////////////
//


ob_end_flush();
Est-ce plus clair ?
Merci.

Re: Ajout onglet dans export excel via php

Posté : 21 nov. 2016, 19:59
par @rthur
A priori en lisant ton code, j'ai l'impression que tu génères un tableau HTML en l'enregistrant avec l'extension .xls

Excel, dans sa grande bonté, réussi à l'ouvrir en laissant croire que c'est un fichier Excel même si ça n'en est pas un du tout.
En revanche, avec cette technique il est impossible à ma connaissance de créer un nouvel onglet. Par ailleurs, il me semble que cette solution ne fonctionne plus dans les versions récentes d'Excel (Excel 365 notamment)

Si tu veux créer un nouvel onglet, il va te falloir générer un vrai fichier Excel avec une librairie comme PHPExcel et la fonction $objPHPExcel->createSheet()
https://github.com/PHPOffice/PHPExcel

Re: Ajout onglet dans export excel via php

Posté : 21 nov. 2016, 21:41
par orell1
oui c'est exactement ça.
C'est bien ce que je craignais!

Il va falloir tout refaire, j'espère que c'est simple...
Merci en tout cas.

Re: Ajout onglet dans export excel via php

Posté : 22 nov. 2016, 23:57
par orell1
bonsoir,

Savez-vous comment je peux ajouter des variables pour afficher les données de mon sql ?

Ma connexion :
// connexion �  la base de donn�es
 $conn = db_connect();

// cr�er la liste des membres
$listeMembres = "" ; 
$listeContractes = "" ; 
$listeAbandonnees = ""; 
$listeEvolutionOppy = ""; 

$sql = "SELECT * FROM ".OPPORTUNITES." WHERE date_enregistrement BETWEEN  (str_to_date( '".$choix_date_debut."' , '%d/%m/%Y %H:%i:%s')) AND (str_to_date( '".$choix_date_fin."' , '%d/%m/%Y %H:%i:%s'))


order by quadri asc";
//echo $sql;
$result = mysql_query($sql) or die(mysql_error());
$addition = "0";
while($result && $row_new=mysql_fetch_array($result))
{

//le reste du code pour créer le fichier excel est présent mais pour éviter un affichage trop lourd j'ai préférer prendre un exemple
$objPHPExcel->getActiveSheet()->SetCellValue('A1', $row_new[entite});

}
malheureusement cela ne fonctionne pas...
Merci par avance.

Re: Ajout onglet dans export excel via php

Posté : 23 nov. 2016, 00:29
par @rthur
malheureusement cela ne fonctionne pas...
Si tu ne nous dit pas ce qui bloque ni les messages d'erreur, c'est difficile de t'aider efficacement...
$objPHPExcel->getActiveSheet()->SetCellValue('A1', $row_new[entite});
A première vue je dirai qu'il y a à minima un problème de crochets ;)

Re: Ajout onglet dans export excel via php

Posté : 23 nov. 2016, 00:39
par orell1
Merci.
Effectivement mais ça c'est en recopiant donc je n'avais pas cette faute :-)
Je n'ai pas d'erreur, il n'y a pas d'affichage c'est tout.

La base sql ne renvoie pas les données.
En fait il s'agit d'implémenter les colonnes/lignes de fichier excel qui sera créé via PHPExcel depuis ma base sql...

Tu vois un peu le truc ?

Re: Ajout onglet dans export excel via php

Posté : 23 nov. 2016, 01:32
par @rthur
Il va falloir que tu fasses un peu de debug par toi même car là c'est difficile de t'aider

Vérifies déjà que tu arrives bien à récupérer les données en PHP
Et fais toi un exemple simple de création de feuille Excel en dur (sans connexion à une bdd)

Une fois que les 2 morceaux marcheront, tu les assembleras

Re: Ajout onglet dans export excel via php

Posté : 23 nov. 2016, 10:18
par orell1
C'est ok la valeur est bien retournée mais une seule...
Alors que j'ai plusieurs données qui devraient remonter :
while($result && $row_new=mysql_fetch_array($result))
{
$objPHPExcel->getActiveSheet()->SetCellValue('A1', utf8_encode(strtoupper($row_new['entite'])));
}
La connexion fonctionne donc mais le au lieux d'avoir à partir de la colonne A1 :
Valeur 1
Valeur 2
Valeur 3
Valeur 4
Etc...

J'ai juste :
Valeur 1

J'ai l'impression que la boucle ne se fait pas...
Merci pour votre aide.

Re: Ajout onglet dans export excel via php

Posté : 23 nov. 2016, 12:41
par @rthur
La boucle while() se fait, mais tu écris toujours dans la même cellule "A1"

Re: Ajout onglet dans export excel via php

Posté : 23 nov. 2016, 22:52
par orell1
C'est bon j'ai trouvé ! :-)
Merci
La solution :
$rowNumber = 5;

  while ($row = mysql_fetch_assoc($result)) {
	//Colonne A
	    $objPHPExcel->getActiveSheet()->setCellValueExplicit('A'.$rowNumber, utf8_encode($row['num_opportunite']));
        $objPHPExcel->getActiveSheet()->getStyle('A'.$rowNumber)->applyFromArray($BStyle);
		$rowNumber++;
    }
Par contre comment obtenir la dernière ligne écrite afin de créer un second tableau ? à la suite du premier...
// Ajoutons d'un deuxième tableau

$objPHPExcel->getActiveSheet()->getStyle('A1:A2')->getAlignment()->applyFromArray(
    array('horizontal' => PHPExcel_Style_Alignment::HORIZONTAL_RIGHT,'vertical' => PHPExcel_Style_Alignment::VERTICAL_CENTER,));
$objPHPExcel->getActiveSheet()->SetCellValue('A1', 'TITRE '.$date);
$objPHPExcel->getActiveSheet()->SetCellValue('A2', 'TITRE 2');
$objPHPExcel->setActiveSheetIndex(0)->mergeCells('A2:H2'); // Nous fusionnons les cellules
$objPHPExcel->getActiveSheet()->SetCellValue('A3', 'DEPUIS LE '.$choix_date_debut);
Merci beaucoup.
Et si par la même occasion vous savez comment transformer une cellule en cellule monétaire ? (en euro)
J'ai essayé ça mais ça ne fonctionne pas :
//*** Define currency and number format.
// currency format, € with < 0 being in red color
$currencyFormat = '#,#0.## \€;[Red]-#,#0.## \€';
// number format, with thousands separator and two decimal points.
$numberFormat = '#,#0.##;[Red]-#,#0.##';
	
        $objPHPExcel->getActiveSheet()->setCellValueExplicit('H'.$rowNumber, $row['total_euros']);
        $objPHPExcel->getActiveSheet()->getStyle('H'.$rowNumber)->applyFromArray($BStyle);	
		$objPHPExcel->getActiveSheet()->getStyle('H'.$rowNumber)->getNumberFormat()->setFormatCode($currencyFormat);

Re: Ajout onglet dans export excel via php

Posté : 25 nov. 2016, 00:42
par orell1
Bonsoir,

C'est bon j'ai trouvé en faisant :
$rowNumber +=2;
$objPHPExcel->getActiveSheet()->setCellValue('A'.$rowNumber, 'N°');
Merci à tous.