1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93
| <?
define("FILENAME","test.xls"); //constante: nom du fichier à générer
$conn=mysql_connect('localhost','root','') or die('Probleme lors de la connexion a la BD MYSQL');
mysql_select_db('phpexcel') or die('Problème lors de la sélection de la BD MYSQL');//Sélection de la DB "phpexcel"
$query="SELECT DATE_APPEL,NOM_CLIENT,XID_CLIENT FROM APPELS_CLIENTS INNER JOIN CLIENTS ON ";
$query.="ID_CLIENT=XID_CLIENT ORDER BY XID_CLIENT,DATE_APPEL";//Requête faisant une jointure sur les 2 tables
$res=mysql_query($query) or die('Problème lors de la réception des enregistrements '.$query);//Exécution de la requête
if(mysql_num_rows($res)>0){ //Si au moins une ligne est retournée
$excel=new COM("Excel.application"); //Instanciation de l'objet COM
$excel->sheetsinnewworkbook=1;//1 seule feuille de calcul dans le document
$excel->Workbooks->Add();//Ajout d'un classeur
$book=$excel->Workbooks(1);//$book contient le classeur actif
$sheet=$book->Worksheets(1);//$sheet contient la feuille active
$sheet->Name="Rapport appel des clients";//Attribution d'un nom à la feuille
$j=64;//C'est ici qu'on va jouer sur les codes ascii
$jj=64;
$client_prec=0;
$nombre_ligne=0;
while($row=mysql_fetch_object($res)){//Parcours du résultat de la requête
echo 'toto';flush();
if($client_prec != $row->XID_CLIENT){//Rupture sur le numéro de client
$j++;
$i=3;
if($nombre_ligne>0){
$lignes[]=$nombre_ligne;//le tableau $lignes contiendra le nbre d'appels par client
$nombre_ligne=0;
}
//Ce bloc if vérifie si il s'agit d'une colonne de type "A" "B" ou "AA" "AB"...
if($jj==64){
$cell=$sheet->Range(chr($j).'1');//chr, renvoie la lettre correspondant au code ASCII
}
else{
$cell=$sheet->Range(chr($jj).chr($j).'1');
}
$cell->value=$row->NOM_CLIENT;//Attribution d'une valeur à la cellule
$cell->HorizontalAlignment=-4108;//On centre le texte
$cell->Font->ColorIndex = 41;//Coloration
}
$nombre_ligne++;//$nombre_ligne sert à calculer le nbre d'appels par client
if($jj==64){
$cell=$sheet->Range(chr($j).$i);
}
else{
$cell=$sheet->Range(chr($jj).chr($j).$i);
}
//Si $j représentant la colonne simple = "Z", alors incrémenter $jj qui représente la 2ème colonne
if(chr($j)=='Z'){
$jj++;
$j=64;
}
$cell->value=$row->DATE_APPEL;//Attribution de la date et de l'heure à la cellule
$cell->NumberFormat="jj/mm/aaaa hh:mm:ss";//Définition du format de la cellule
/* Notez que selon vos paramètres régionnaux et la configuration d'Excel, vous devez peut-être
utiliser un format de cellule comme ceci: dd/mm/yyyy hh:mm:ss (anglais)*/
$client_prec=$row->XID_CLIENT;//gestion de la rupture sur le numéro de client
$i++;
}
}
else{
die('Les tables sont vides ou pas de jointure possible');//si la requête ne retourne rien
}
$lignes[]=$nombre_ligne;//ajout des appels du dernier client dans $lignes
$sorted=$lignes; //on copie le nombre d'enreg par client dans un autre tableau
sort($sorted); //on trie cet autre tableau
//on récupère le plus grand nombre de record, pour pouvoir aligner les résultats dans Excel
$max_val=5+$sorted[count($sorted)-1];
$colonne=65;
$colonne2=64;
//Boucle allant afficher le nombre total d'appels par client
for($i=0;$i<count($lignes);$i++){
if($colonne2>64){
$cell=$sheet->Range(chr($colonne2).chr($colonne).$max_val);
}
else{
$cell=$sheet->Range(chr($colonne).$max_val);
}
if(chr($colonne)=='Z'){
$colonne2++;
$colonne=64;
}
$cell->value="Total: ".$lignes[$i];
$cell->HorizontalAlignment=-4108;
$cell->Font->ColorIndex=3;
$colonne++;
}
$book->saveas(FILENAME);//Sauvegarde du fichier
unset($sheet);//Libération de $sheet
unset($book);//Libération de $book
$excel->Workbooks->Close();//Fermeture du classeur
$excel->Quit();//On quitte Excel
unset($excel);//Libération de l'instance $excel
?> |
Partager