[RESOLU] Vers un Fichier excel

Eléphant du PHP | 58 Messages

06 déc. 2013, 17:41

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
On n'a le droit de ne pas savoir mais on n'a pas le droit de ne pas demander.
Ubuntu Php Mysql

ViPHP
xTG
ViPHP | 7331 Messages

06 déc. 2013, 18:54

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 ?

Eléphant du PHP | 58 Messages

06 déc. 2013, 21:38

Bonsoir xTG,
oui pardonnes-moi.

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

Merci
On n'a le droit de ne pas savoir mais on n'a pas le droit de ne pas demander.
Ubuntu Php Mysql

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 8758 Messages

06 déc. 2013, 21:58

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é ;)

@+
Il en faut peu pour être heureux ......

Eléphant du PHP | 58 Messages

06 déc. 2013, 22:49

Bonsoir xTG,

Super je vais suivre tes conseils.

Merci très sincèrement

Tout devient plus réelle avec tes explications.

Ch
On n'a le droit de ne pas savoir mais on n'a pas le droit de ne pas demander.
Ubuntu Php Mysql

Eléphant du PHP | 58 Messages

13 déc. 2013, 17:09

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
On n'a le droit de ne pas savoir mais on n'a pas le droit de ne pas demander.
Ubuntu Php Mysql

ViPHP
xTG
ViPHP | 7331 Messages

13 déc. 2013, 19:09

La documentation de PHP sur la fonction header.
http://php.net/header

Eléphant du PHP | 58 Messages

13 déc. 2013, 19:17

Bonsoir xTG,
je ne connaissais pas ce site php.

Merci très sincèrement
On n'a le droit de ne pas savoir mais on n'a pas le droit de ne pas demander.
Ubuntu Php Mysql

Eléphant du PHP | 79 Messages

14 déc. 2013, 19:13

C'est quand même le site du manuel de php ><

bonne chance pour toi

Eléphant du PHP | 58 Messages

14 déc. 2013, 20:29

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
On n'a le droit de ne pas savoir mais on n'a pas le droit de ne pas demander.
Ubuntu Php Mysql

Eléphant du PHP | 58 Messages

15 déc. 2013, 00:45

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
Vous n’avez pas les permissions nécessaires pour voir les fichiers joints à ce message.
On n'a le droit de ne pas savoir mais on n'a pas le droit de ne pas demander.
Ubuntu Php Mysql

ViPHP
xTG
ViPHP | 7331 Messages

15 déc. 2013, 09:25

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.

Eléphant du PHP | 58 Messages

15 déc. 2013, 12:12

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
On n'a le droit de ne pas savoir mais on n'a pas le droit de ne pas demander.
Ubuntu Php Mysql

ViPHP
xTG
ViPHP | 7331 Messages

15 déc. 2013, 12:29

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é.

Eléphant du PHP | 58 Messages

15 déc. 2013, 15:11

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
On n'a le droit de ne pas savoir mais on n'a pas le droit de ne pas demander.
Ubuntu Php Mysql