Page 1 sur 2

Vers un Fichier excel

Posté : 06 déc. 2013, 17:41
par acym
Bonjour,
J'ai fait mon script pour envoyer les données de mysql sur un fichier excel.
Mais je ne sais pas comment faire pour que l’utilisateur clique sur un bouton et envoyer exécuter le script.
voici le script (si vous le trouvez nul dites le moi!!!!!! :shock:
<? 
define("FILENAME","E:\\TestExcel\\phpexcel.xls");


	$conn=mysql_connect('*******','*******','********') or die('Problème lors de la connexion à la BD MYSQL');
	mysql_select_db('phpexcel',$conn) or die('Problème lors de la sélection de la BD MYSQL');
	$res=mysql_query("SELECT DATE_APPEL,NOM_CLIENT,XID_CLIENT  FROM APPELS_CLIENTS INNER JOIN CLIENTS ON ID_CLIENT=XID_CLIENT ORDER BY XID_CLIENT,DATE_APPEL") or die('Problème lors de la réception des enregistrements');

	if(mysql_num_rows($res)>0){
		if(file_exists(FILENAME)){			
			unlink(FILENAME);

		}

		$excel=new COM("Excel.application");
		$excel->sheetsinnewworkbook=1;
		$excel->Workbooks->Add();
		$book=$excel->Workbooks(1);
		$sheet=$book->Worksheets(1);
		$sheet->Name="Rapport appel des clients";		
		$j=64;
		$jj=64;
		$client_prec=0;	
		$nombre_ligne=0;
		while($row=mysql_fetch_object($res)){
		
		
			if($client_prec != $row->XID_CLIENT){
				
				$j++;									
				$i=3;					 					
				if($nombre_ligne>0){
					$lignes[]=$nombre_ligne;
					$nombre_ligne=0;
				}
				if($jj==64){
					$cell=$sheet->Range(chr($j).'1');
				}
				else{
					$cell=$sheet->Range(chr($jj).chr($j).'1');
				}
				$cell->value=$row->NOM_CLIENT;				
				$cell->HorizontalAlignment=-4108;
    				$cell->Font->ColorIndex = 41;
				
				
			
			}

			$nombre_ligne++;
			if($jj==64){
				$cell=$sheet->Range(chr($j).$i);
			}
			else{
				$cell=$sheet->Range(chr($jj).chr($j).$i);
			}
			
				
			if(chr($j)=='Z'){
				  $jj++;				  
				  $j=64;
			}
			
			
			$cell->value=$row->DATE_APPEL;			
			$cell->NumberFormat="jj/mm/aaaa hh:mm:ss";
			$client_prec=$row->XID_CLIENT;
			$i++;
		}
	}
	else{
		die('Les tables sont vides ou pas de jointure possible');
	}
	
	$lignes[]=$nombre_ligne;
	$sorted=$lignes; //on copie le nombre d'enreg par client dans un autre tableau
	sort($sorted); // on trie cet autre tableau
	$max_val=5+$sorted[count($sorted)-1]; // on récupère le plus grand nombre de record, pour pouvoir aligner les résultat dans Excel 
	$colonne=65;
	$colonne2=64;


	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);
	unset($sheet);
	unset($book);
	$excel->Workbooks->Close();
	$excel->Quit();
	unset($excel);	
	

?>

MERCI

Re: Vers un Fichier excel

Posté : 06 déc. 2013, 18:54
par xTG
Ta demande n'est pas claire.
Tu ne sais pas comment exécuter ce script ?
Tu ne sais pas comment faire exécuter ce script à un visiteur de ton site ?

Re: Vers un Fichier excel

Posté : 06 déc. 2013, 21:38
par acym
Bonsoir xTG,
oui pardonnes-moi.

je ne sais pas comment faire exécuter ce script à un visiteur de mon site intranet.

Merci

Re: Vers un Fichier excel

Posté : 06 déc. 2013, 21:58
par moogli
Salut,

Ce script ne peu fonctionner que sur ton ordi vu le nom de fichier et l'utilisation de la lib com.

Ensuite il faut que tu utilise la fonction header pour envoyer le fichier au navigateur. (Exemple dans la doc, c'est pdf mais le principe est la).

Ensuite c'est assez simple si ce script est la cible du formulaire (action) qui contient le bouton le tour est joué ;)

@+

Re: Vers un Fichier excel

Posté : 06 déc. 2013, 22:49
par acym
Bonsoir xTG,

Super je vais suivre tes conseils.

Merci très sincèrement

Tout devient plus réelle avec tes explications.

Ch

Re: Vers un Fichier excel

Posté : 13 déc. 2013, 17:09
par acym
Bonjour MOOGLI,
Salut,

Ce script ne peu fonctionner que sur ton ordi vu le nom de fichier et l'utilisation de la lib com.

Ensuite il faut que tu utilise la fonction header pour envoyer le fichier au navigateur. (Exemple dans la doc, c'est pdf mais le principe est la).

Ensuite c'est assez simple si ce script est la cible du formulaire (action) qui contient le bouton le tour est joué ;)

@+

de quelle doc tu parles
Merci

Re: Vers un Fichier excel

Posté : 13 déc. 2013, 19:09
par xTG
La documentation de PHP sur la fonction header.
http://php.net/header

Re: Vers un Fichier excel

Posté : 13 déc. 2013, 19:17
par acym
Bonsoir xTG,
je ne connaissais pas ce site php.

Merci très sincèrement

Re: Vers un Fichier excel

Posté : 14 déc. 2013, 19:13
par orenx22
C'est quand même le site du manuel de php ><

bonne chance pour toi

Re: Vers un Fichier excel

Posté : 14 déc. 2013, 20:29
par acym
Bonsoir orenx22,

Désolé mais je ne peux tout savoir, je préfère passer par ce super forum.
comme cela j’apprends plus y compris pour les sites LoL.
Merci pour votre aide à tous

Re: Vers un Fichier excel

Posté : 15 déc. 2013, 00:45
par acym
Bonsoir,
j'ai deux erreurs

l'une excel me dit que le fichier est différent que celui de l'extension spécifié
Capture.JPG
Puis cela l'ouvre en csv.
avec cette erreur
Capture1.JPG

Code : Tout sélectionner

( ! ) Notice: Undefined variable: xls_output in C:\wamp\www\Thea\Export\excel.php on line 18
Il faut qu'il s'ouvre en xls et non pas en csv.

voici les deux fichiers
data_export.php
<?php
/*
* fonction pour se connecter a la base de donnée
 
*@param $db(array) de config_export.php
 
*@return $link
*/
// On dis que la variable $db va prendre la valeur du tableau de $db ecris dans config.php
function database_connect($db) {
 $link=mysql_connect($db['host'],$db['user'],$db['pass'])or die ("connexion impossible : erreur ! ");
 mysql_select_db($db['base']);
 mysql_query('SET NAMES UTF8');
 return $link; // return va juste dire : true si ca a marché, ou ce qu'il y a marqué dans 'or die' si ca a foiré
 }
 
/**
 * fonction de deconnection de base de donnee
 * @param $link lien de base
 * @return rien
 */
function database_disconnect($link){
 mysql_close($link);
}
?>
excel.php
<?php
header("Content-type: application/vnd.ms-excel");
header("Content-disposition: xls" . date("Y-m-d") . ".xls");
header( "Content-disposition: filename= test1.xls");
include "config_export.php"; // gere les login et pass de la BDD
include "data_export.php";
 
$link=database_connect($db); // on se connecte à la base de donnée grâce à data_fn.php
 
$table = 'excel'; /* Remplacez par le nom de votre table à exporter ! */
$file = 'export';
$result = mysql_query("SHOW COLUMNS FROM ".$table."");
$i = 0;
if (mysql_num_rows($result) > 0)
{
while ($row = mysql_fetch_assoc($result))
{
$xls_output .= $row['Field']."; ";
$i++;
}
}
 
$xls_output .= "\n";
 
$values = mysql_query("SELECT * FROM ".$table."");
while ($rowr = mysql_fetch_row($values))
{
for ($j=0;$j<$i;$j++)
{
$xls_output .= $rowr[$j]."; ";
}
$xls_output .= "\n";
}
 
$filename = $file."_".date("Y-m-d_H-i",time());
 
print $xls_output;
exit;
?>
Merci

Re: Vers un Fichier excel

Posté : 15 déc. 2013, 09:25
par xTG
L'erreur est flagrante, la variable $xls_output n'existe pas. ;)

Tu tentes de concaténer un résultat à une variable qui n'est jamais créé, PHP arrive tout de même à le faire mais te prévient que la variable n'existe pas.
Initialises la variable $xls_output à une chaîne vide avant ta boucle.

Re: Vers un Fichier excel

Posté : 15 déc. 2013, 12:12
par acym
Bonjour xTG,

j'ai mis $xls_output=' ';
avant le $i
mais toujours même erreur ligne 19 .
<?php
header("Content-type: application/vnd.ms-excel");
header("Content-disposition: xlsx" . date("Y-m-d") . ".xlsx");
header( "Content-disposition: filename= test1.xlsx");
include('config_export.php');// gere les login et pass de la BDD
include ('data_export.php');
 
$link=database_connect($db); // on se connecte à la base de donnée grâce à data_export.php
 
$table = 'excel'; /* Remplacez par le nom de votre table à exporter ! */
$file = 'export';
$result = mysql_query("SHOW COLUMNS FROM ".$table."");
$xls_output='';
$i = 0;
if (mysql_num_rows($result) > 0)
{
while ($row = mysql_fetch_assoc($result))
{
/* erreur ligne 19*/     $xlsx_output .= $row['Field']."; ";   // erreur ligne 19
$i++;
}
}
 
$xlsx_output .= "\n";
 
$values = mysql_query("SELECT * FROM ".$table."");
while ($rowr = mysql_fetch_row($values))
{
for ($j=0;$j<$i;$j++)
{
$xlsx_output .= $rowr[$j]."; ";
}
$xlsx_output .= "\n";
}
 
$filename = $file."_".date("Y-m-d_H-i",time());
 
print $xlsx_output;
exit;
?>
Merci
et pourquoi il veut ouvrir en csv , puisque je lui dit en xlsx?

Merci

Re: Vers un Fichier excel

Posté : 15 déc. 2013, 12:29
par xTG
Ton nom de variable n'est pas correct, relis toi. ;)

Pourquoi CSV ? Parce que ce n'est pas l'extension qui fait le fichier mais son contenu.
Si tu veux générer du vrai xls il te faut une librairie.
Mais Excel sait lire le csv donc à moins que tu ne veuilles générer des graphiques et des formules tu n'en as pas l'utilité.

Re: Vers un Fichier excel

Posté : 15 déc. 2013, 15:11
par acym
Bonjour Xt+TG,
Ce qui est super, c'est que tu m'aide à me corriger sans me donner la solution.

Donc je dois passer par une librairie car il faut absolument que le fichier excel soit identique au format.

Merci