Lire un fichier excel

Rael87 Messages postés 10 Date d'inscription lundi 13 juin 2005 Statut Membre Dernière intervention 7 juillet 2006 - 7 juil. 2006 à 10:44
Rael87 Messages postés 10 Date d'inscription lundi 13 juin 2005 Statut Membre Dernière intervention 7 juillet 2006 - 7 juil. 2006 à 14:31
Bonjour
Voila mon probleme, aprés beaucoup de recherche je n'ai pas trouvé la solution.
J'ai un fichier excel, et je souhaite en extraire les données par cellules, afin de les organiser dans un tableau, pour l'instant je n'arrive qu'a l'extraire lignes par lignes, mais impossible d'extraire les données cellules par cellules. Si quelqu'un l'a deja fait ca me serait fort utile.
Merci

2 réponses

Paladin2107 Messages postés 154 Date d'inscription samedi 25 octobre 2003 Statut Membre Dernière intervention 5 septembre 2008 1
7 juil. 2006 à 10:59
SLT
Jette un oeil dessus peut etre que cela pourrait d'aider. Bon courage

<?
define("FILENAME","votre_racine_web\\phpexcel.xls"); //constante: nom du fichier à générer
$conn=mysql_connect('votre_hôte','utilisateur','mdp') or die('Probleme lors de la connexion a la BD MYSQL');
mysql_select_db('phpexcel',$conn) 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
if(file_exists(FILENAME)){ //Suppression du fichier précédement créé
unlink(FILENAME); //Suppression du fichier
}
$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
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
?>
0
Rael87 Messages postés 10 Date d'inscription lundi 13 juin 2005 Statut Membre Dernière intervention 7 juillet 2006
7 juil. 2006 à 14:31
Merci pour ta reponse mais aprés un rapide coup d'oeil, il me semble que cette source sert a créer une feuille excel avec des données d'une BD.
Moi je recherche un code pour lire un fichier excel et en extraire les données cellule par cellules, c'est a dire l'inverse de ce code, je pense que ca doit etre possible sans utiliser de classes.
0
Rejoignez-nous