Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
2264 connectés 

  FORUM HardWare.fr
  Programmation
  PHP

  Parcours d'un fichier Excel

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

Parcours d'un fichier Excel

n°822445
roland77
Posté le 13-08-2004 à 14:57:29  profilanswer
 

Bonjour,  
 
Je cherche à parcourir un fichier en php, pour les insérer pour une base de données mysql. (pour faire des pages dynamiques à partir de la base aprés). Et j'ai commencé par chercher sur le net, et les seuls librairies que j'ai trouvé permettent de générer des fichiers excels avec php, donc dans ce sens ca m'interresse pas trop.  
 
Je me demande si cela est possible (en parcourant directement le fichier xls ca ne peut pas marcher car c'est du binaire)
 
Et sinon, il y a la solution d'utiliser des objets COM de microsoft (mon serveur est sur windows) pour interragir avec Excel. Mais je ne l'ai jamais utilisé COM, et je comprend pas trop comment ca marche.  
 
 
Voila, donc pour résumer je veux récupérer des données d'un fichier Excel. Can you help please  :ange:  
 
 


---------------
http://www.lolos.fr/
mood
Publicité
Posté le 13-08-2004 à 14:57:29  profilanswer
 

n°822457
-Farenheit​-
Posté le 13-08-2004 à 15:05:03  profilanswer
 

Dans Excel : Enregistrer Sous \ Type de fichier : CSV
 
Regarde ce que ca te donne, tu devrais avoir moins de mal  ;)

n°822472
roland77
Posté le 13-08-2004 à 15:15:28  profilanswer
 

Ouai, je connais cette solution, c'est évident que ca serait plus pratique de passer par ca.  
 
Mais la j'aimerai le faire sans que l'utilisateur doit enregistrer son fichier à chaque fois. (je bosse pour faire un intranet, y'a pas mal de fichiers à gérer et les gens sont handicapés :-()
 
C'est pour ca que je cherchais une solution PHP ONLY :)
 
Mais merci qd meme


---------------
http://www.lolos.fr/
n°822486
-Farenheit​-
Posté le 13-08-2004 à 15:27:45  profilanswer
 

Arf, PHP ONLY, je vois pas comment faire dans ce cas...  :(  
 
Par contre, une macro dans excel qui enregistre le ficher au bon format, avec éventuellement l'ajout d'un bouton dans la barre de menu pour appeler cette macro, ca c'est trés faisable...
 
Un gros bouton PUBLIER, de 10 cm sur 5, c'est pas User Handicapés Friendly ca ? :D  :D

n°822492
knemo
Posté le 13-08-2004 à 15:32:17  profilanswer
 

La lecture c un peut comme l'écriture fo seulement faire open au début...
mais les manip pour accéder aux données sont les mêmes.
 
*************************************************************************
$excel = new COM("Excel.application" ); // ouverture connexion à Excel
 
$classeur = $excel->Workbooks->Open($nom_fichier);
// Nom du fichier à ouvrir : chemin absolu  
 
// je selectionne la feuille à lire (la numérotation des feuilles commence à 1
$feuille = $classeur->Worsheets($no_feuille);
 
// pour lire une cellule  ex : A1 ...
 
// je la selectionne :
$cellule = $feuille->Range("A1" );
 
// j'affiche son contenu :
echo $cellule->value;
 
// je ferme le document  
 
// si Excel fait la tête car on n' a pas sauvegardé  
// $classeur->save();  
 
$classeur->close();
 
// je ferme excel
$excel->Workbooks->close();
$excel->Quit();
 
// et on fait des unset de toutes les variables qu'on a utilsé
************************************************************************
 
sinon ya de bons tuto sur developpez.com

n°822535
roland77
Posté le 13-08-2004 à 16:08:41  profilanswer
 

J'y avais pensé aussi, d'ailleurs j'ai crée une macro.  
Je me suis dit que c'est la solution "AU CAS OU" je trouve rien d'autres car les gens ici sont vraiment trés trés handicapés (et pourtant je suis dans un grand centre info avec des gars supposés compétent) :)
 
L'idée du gros bouton est bonne aussi, j'aime bien ton concept de User Handicapés Friendly:)
Mais en fait je cherchais plus à faire un script avec le module COM comme knemo.  
D'ailleurs merci à vous 2 pour l'aide.  
 
knemo je teste un peu ca, pour voir si j'arrive bien à faire ce que je veux avec. Je-repasse tout à l'heure quand j'ai testé un ptit bout de script.  :hello:  
 

-Farenheit- a écrit :

Arf, PHP ONLY, je vois pas comment faire dans ce cas...  :(  
 
Par contre, une macro dans excel qui enregistre le ficher au bon format, avec éventuellement l'ajout d'un bouton dans la barre de menu pour appeler cette macro, ca c'est trés faisable...
 
Un gros bouton PUBLIER, de 10 cm sur 5, c'est pas User Handicapés Friendly ca ? :D  :D


---------------
http://www.lolos.fr/
n°823125
roland77
Posté le 14-08-2004 à 12:44:44  profilanswer
 

Salut,  
 
J'ai pu testé ton code et ca marche extraordinairement. C'est magique comme tu peux accéder à des fichiers excel avec un objet COM.  
Terrible knemo, je te remercis pour m'avoir expliquer comment ca marchait (au moins me lancer dans le bain avec ton petit bout de code)
 
En fait, le seul truc embétant, c'est qu'apparament il n'y a pas de docs pour l'utilisation des objets COM avec excel, j'ai rien trouvé. J'ai fais un tour sur developpez.com, et j'ai fais comme il disais : de faire des macros, et aprés regarder le code de ces macros pour récupérer les fonctions utilisées...  
La seule chose que j'ai pas réussi à faire, c'est d'avoir le nombre de cellules d'une ligne ou d'une colonne, mais c'est un truc que je sais pas faire sous Excel à la base :-D
 
Sinon, le module COM de php fonctionne qu'avec les softs de Microsoft (Excel, Word, ... ?) car j'ai l'impression que ca sont les seuls softs à avoir ce module implémenté (j'trouve pas d'exemples avec d'autres softs)
 
 
Bref je le redis c'est génial :)
Merci beaucoup pour l'aide, maintenant je passes pour le dieu du php au boulot grace à toi ;-)
 
Sinon une ptite rectification bidon, mais si jamais qq1 reprend le code :  

Code :
  1. // je selectionne la feuille à lire (la numérotation des feuilles commence à 1
  2. $feuille = $classeur->Worksheets($no_feuille);


---------------
http://www.lolos.fr/
n°823142
knemo
Posté le 14-08-2004 à 14:21:40  profilanswer
 

Wahoooooooo!!!!
 
pour une fois que je rends service !!!!!!
 
Tu me diras moi non plus j'ai pas réussi à savoir le nombre de
feuilles d'un document (en fait c pas tout a fait
le meme probleme mais c dans le genre).
 
Au sujet de la doc : non effectivement c un peu la merde,
fo que t'y aille à la barbare....!!!
 
Pour les autres soft : ben j'ai essayé avec crystal reports
mais bon ça se résumait à ouvrir et enregistrer un document
vierge (cro bien)... et comme j'ai bloqué à fond la dessus ben
je suis passé à excel.
Par contre je m'y connais pas trop en COM
(juste Excel à l'aide des tutos) donc je pourrais pas trop t'en
parler.
 
Justement, comme tu commences avec EXCEL/COM :
 
pourrais tu me rendre un service :
peux tu essayer de modifier par PHP la mise en forme  
de ton document Excel pour voir.
Genre : mettre en "ajusté sur une page" une des feuilles de
ton classeur . le code c'est :
 
$ps = $feuille->PageSetup;
$ps->Zoom = false;
$ps->FitToPagesWide = 1;
$ps->FitToPagesTall = 1;
 
  A mon boulot ce code plante : "Propriété non reconnue"

n°823146
knemo
Posté le 14-08-2004 à 14:25:13  profilanswer
 

suite du message ...(désolé)
 
 
alors que sur 2 postes de mon humble chez moi ça fonctionne.
 
(d'ailleurs à ce sujet j'ai laissé un topic sur le forum
auquel personne n'a répondu :??: )
 
Donc si tu pouvais essayé à titre de sondage ce serait sympathique!!
(et indiquer : système d'exploitation et version Excel version Office)
 
Merci d'avance et bon WE  :D !!!

n°824010
roland77
Posté le 16-08-2004 à 10:50:29  profilanswer
 

Je reviens à la charge, désolé mais le week-end je suis pas au boulot alors le PHP c'est forbiden à la maison ;-)
 
sinon pour la doc d'excel et du module COM, je crois que j'ai dégotté quelque chose, je te tient au courant.  
Et pour ton bout de code, je teste ce matin, la je dois finir un script je suis taquais :)
Mais peut tu me mettre ton code entier, avec l'ouverture et l'enregistrement de ton fichier xls car j'ai un peu la flemme de savoir quelle fonction on utilise avec excel :)
 
à toute


Message édité par roland77 le 16-08-2004 à 10:52:49

---------------
http://www.lolos.fr/
mood
Publicité
Posté le 16-08-2004 à 10:50:29  profilanswer
 

n°824031
effisk
我不讲中文
Posté le 16-08-2004 à 11:16:35  profilanswer
 

pour excel, j'étais tombé là-dessus y'a quelques mois, ça peut peut-être aider...
 
 
http://www.ozgrid.com/


---------------
London Box Office: Comédie Musicale Londres
n°824146
knemo
Posté le 16-08-2004 à 13:16:12  profilanswer
 

Voici le script ya plus qu'à remplacer le $nom_fichier_absolu_a_creer par un vrai nom de fichier à créer
 
<?
// *********************************
//CREATION FICHIER EXCEL
// **********************************
include("./../admin/ADMIN_config.php" );
 
$excel = new COM("Excel.application" ); //Instanciation de l'objet COM
 
$excel->sheetsinnewworkbook = 2;  // 2 feuilles dans mon classeur
 
$excel->Workbooks->Add(); //Ajout d'un classeur
 
$book = $excel->Workbooks(1); //$book contient le classeur actif
 
$sheet = $book->Worksheets(1); // j'écris dans la feuille 1
 
$sheet->Name = "PAYSAGE"; // nom de la page
 
$cell = $sheet->Range('A1');
$cell->value = "cette page doit s'imprimer en paysage";
 
 
$ps = $sheet->PageSetup;  
$ps->Zoom = false;  
$ps->FitToPagesWide = 1;  
$ps->FitToPagesTall = 1;  
 
 
$sheet = $book->Worksheets(2); // j'écris dans la feuille 2
$sheet->Name = "autre"; // nom de la page
$cell = $sheet->Range('A1');
$cell->value = "cette page doit s'imprimer en portrait";
 
$book->saveas($nom_fichier_absolu_a_creer);//Enregistrement du document
 
 
 
$excel->Workbooks->Close();//Fermeture du classeur
 
$excel->Quit();//On quitte Excel
 
unset($sheet);//Libération de $sheet
unset($book);//Libération de $book
unset($excel);//Libération de l'objet $excel
 
?>
 
Merci !!!
 
Sinon j'ai pas encore regarder le site ozgrid ... je vais y aller


Message édité par knemo le 16-08-2004 à 13:17:44
n°824214
roland77
Posté le 16-08-2004 à 14:13:48  profilanswer
 

Ca y est j'ai pu testé ton code.  
 
Cela a l'air de fonctionner à moitié, je m'explique.  
 
J'ai crée un fichier test.xls, j'ai mis son chemin absolu dans ton code. Quand j'execute il me demande si je veux enregistrer les modifications du fichier dans classeur1.xls.  
 
J'enregistre, et dans classeur1.xls il a 2 feuilles "Paysage" et "autres". Et ce fichier-la correspond bien avec ton code.  
 
 
Voila, ca t'a aidé :) ?


Message édité par roland77 le 16-08-2004 à 14:17:36

---------------
http://www.lolos.fr/
n°824219
knemo
Posté le 16-08-2004 à 14:19:05  profilanswer
 

zut ... chavais bien que j'avais oublié
le plus important :
 
après fo vérifier la mise en page correspondante
(aperçu avant impression)
 
la première page doit $etre en paysage et l'autre en portrait :
 
à noter, php a pas râlé : c une bonne nouvelle ...
(ps : c quoi ton système d'exploitation et version Office/Excel)
 
Merci !

n°824227
roland77
Posté le 16-08-2004 à 14:26:12  profilanswer
 

Heu  :sarcastic:, moi aussi j'ai oublié le plus important : lors du chargement de la page j'ai eu un ptit warning :)
 

Code :
  1. Warning: (null)(): Invoke() failed: Une exception s'est produite. Source: Microsoft Excel Description: Fichier inaccessible. Essayez l'une des opérations suivantes : • Vérifiez que le dossier spécifié existe. • Vérifiez que le dossier dans lequel se trouve le fichier n'est pas en lecture seule. • Vérifiez que le nom du fichier ne comporte les caractères suivants: | < > ? [ ] : ni * • Vérifiez que le nom du fichier ou du chemin ne dépasse pas 218 caractères. in d:\lot1\home\test5.php on line 36


 
J'avais complétement zappé ca.  
Au niveau de l'"apercu avant impression", les 2 s'affichent en portrait.  
 
Désolé si je t'ai filé une fausse joie :-)
 
Heu, j'ai win XP avec Excel 2000 installé


---------------
http://www.lolos.fr/
n°824230
knemo
Posté le 16-08-2004 à 14:32:48  profilanswer
 


et si tu mets en commentaire la partie mise en page (là où ya $ps)
ça dit quoi (parcequ'en fait ton message d'erreur est bizarre)
 
<?  
// *********************************  
//CREATION FICHIER EXCEL  
// **********************************  
include("./../admin/ADMIN_config.php" );  
 
$excel = new COM("Excel.application" ); //Instanciation de l'objet COM  
 
$excel->sheetsinnewworkbook = 2;  // 2 feuilles dans mon classeur  
 
$excel->Workbooks->Add(); //Ajout d'un classeur  
 
$book = $excel->Workbooks(1); //$book contient le classeur actif  
 
$sheet = $book->Worksheets(1); // j'écris dans la feuille 1  
 
$sheet->Name = "PAYSAGE"; // nom de la page  
 
$cell = $sheet->Range('A1');  
$cell->value = "cette page doit s'imprimer en paysage";  
 
 /*
$ps = $sheet->PageSetup;  
$ps->Zoom = false;  
$ps->FitToPagesWide = 1;  
$ps->FitToPagesTall = 1;  
 */
 
$sheet = $book->Worksheets(2); // j'écris dans la feuille 2  
$sheet->Name = "autre"; // nom de la page  
$cell = $sheet->Range('A1');  
$cell->value = "cette page doit s'imprimer en portrait";  
 
$book->saveas($nom_fichier_absolu_a_creer);//Enregistrement du document  
 
 
 
$excel->Workbooks->Close();//Fermeture du classeur  
 
$excel->Quit();//On quitte Excel  
 
unset($sheet);//Libération de $sheet  
unset($book);//Libération de $book  
unset($excel);//Libération de l'objet $excel  
 
?>  
 
sinon t'inquiète pas pour la fausse joie, aujourd'hui j'ai l'habitude,
j'arrête pas de tomber sur des trucs horribles...
 
PS : désolé d'utiliser ton serveur comme  poste de test distant
 
 

n°824311
roland77
Posté le 16-08-2004 à 16:13:25  profilanswer
 

re-
 
ca me donne exactement la même chose :  
 

Code :
  1. Warning: (null)(): Invoke() failed: Une exception s'est produite. Source: Microsoft Excel Description: Fichier inaccessible. Essayez l'une des opérations suivantes : • Vérifiez que le dossier spécifié existe. • Vérifiez que le dossier dans lequel se trouve le fichier n'est pas en lecture seule. • Vérifiez que le nom du fichier ne comporte les caractères suivants: | < > ? [ ] : ni * • Vérifiez que le nom du fichier ou du chemin ne dépasse pas 218 caractères. in d:\lot1\home\test5.php on line 34


 
J'ai l'impression que c'est plutot l'enregistrement ou l'ouverture du fichier qui pose problémes  
 
 
Y'a pas de probs, moi aussi chuis content si je peux t'aider :)


---------------
http://www.lolos.fr/
n°824354
knemo
Posté le 16-08-2004 à 16:48:43  profilanswer
 

Question : est ce que le nom de fichier que tu mets existe??
Parcequ'en fait j'avais oublier de mettre un condition d'existence.
MAINTENANT voici ce que fait le script :
Là on crée un fichier (dont on donne le nom absolu).
Avant d'enregistrer ce nouveau fichier excel, on vérifie son
existence, s'il existe , on l'éfface(unlink), puis
on enregistre notre fichier excel.
 
 
[ça c'est le dernier essai, après je te laisse tranquille...
en fait c pour élucider le problème du comment du pourquoi le
script il marche pas chez toi même sans les lignes de
mise en page ... ]  :??:  
 
[De toute façon j'ai une solution de rechange pour la mise en page ...
Pas très propre mais qui marche ... mais c pour savoir]
 
merchi!!
 
<?
// **********************
// CREATION FICHIER EXCEL
// **********************
 
$nom_fichier = "c:\\repertoire\\nom_fichier.xls";
 
$excel = new COM("Excel.application" ); //Instanciation de l'objet COM
 
$excel->sheetsinnewworkbook = 2;  // 2 feuilles dans mon classeur
 
$excel->Workbooks->Add(); //Ajout d'un classeur
 
$book = $excel->Workbooks(1); //$book contient le classeur actif
 
$sheet = $book->Worksheets(1); // j'écris dans la feuille 1
 
$sheet->Name = "PAYSAGE"; // nom de la page
 
$cell = $sheet->Range('A1');
$cell->value = "cette page doit s'imprimer en paysage";
 
/*
$ps = $sheet->PageSetup;  
$ps->Zoom = false;  
$ps->FitToPagesWide = 1;  
$ps->FitToPagesTall = 1;  
*/
 
$sheet = $book->Worksheets(2); // j'écris dans la feuille 2
$sheet->Name = "autre"; // nom de la page
$cell = $sheet->Range('A1');
$cell->value = "cette page doit s'imprimer en portrait";
if(file_exists($nom_fichier))
{
 unlink($nom_fichier);
}
$book->saveas($nom_fichier);//Enregistrement du document
 
$excel->Workbooks->Close();//Fermeture du classeur
 
$excel->Quit();//On quitte Excel
 
unset($sheet);//Libération de $sheet
unset($book);//Libération de $book
unset($excel);//Libération de l'objet $excel
 
?>
FINI!

n°824377
roland77
Posté le 16-08-2004 à 17:08:51  profilanswer
 

DE RETOUR :-)
 
En fait, tt à l'heure le prob était de mon coté :)
comme nom de fichier j'avais mis "C:\Bureau\toto.xls" comme nom de fichier au lieu de "C:\\Bureau\\toto.xls" ce qui est plus logique (erreur de newbie :D)  
 
Bref, maintenant l'enregistrement de ton fichier fonctionne niquel, il n'y a plus d'erreur ni de warning lors du chargement.  
 
Par contre j'ai décommenté la partie sur l'affichage Portrait/paysage, et la dessus il n'y a pas de diffs dans le fichier Excel. Tout est en portrait comme avant.
 
 
Voila, ton script marche presque ;-)


Message édité par roland77 le 17-08-2004 à 09:31:33

---------------
http://www.lolos.fr/
n°824510
knemo
Posté le 16-08-2004 à 20:55:11  profilanswer
 

Oh ..... le teuteu neuneu!!!!!!!
 
Oh la honte...  :o  tu sais quoi ???
 
En fait dans la portion de code, c'est pas la mise en page paysage que  
j'ai mis, mais l'ajustement de la feuille sur une page d'impression...
et comme à mon stage ça marche pas j'ai pas fait attention...
(et donc c le comment du pourquoi t'as pas pu le voir en visu)
 
Oups..... désolé....
Mais bon, si PHP t'as rien dit c'est pas mal... ça veut dire
qu'il prend en compte les propriétés (en fait l'ajustement
marchait pas non plus)
 
donc pour que ça fasse vraiment une impression en paysage après le
bloc $ps... (que tu peux laisser)
fo mettre (STP) :
$ps->Orientation = 2; // 2 = xlLandscape
 
Mais bon t'embête plus avec...
là de toute façon c'est un problème de config du serveur...
parceque ça marche sur 2 postes de mon chez moi,  
et dans plein d'autres exemples) Par contre je l'ai vu  
de mes yeux à moi marcher qu'avec un SE Win XP
(et apperemment toi aussi t'es en XP)
 
 
Mais juste pour donner des idées aux personnes qui ont des soucis  
avec certaines propriétés voici mon bidouillage pour passer
à trav :
j'utilise un modèle préformaté (avec la mise en page déjà
configurée : marges, orientation etc ....)
et lorsque je veux générer un fichier, je fais une copie
et j'écris direcetemnt sur la copie : l'avantage : comme
ya déjà une partie tout faite, c plus rapide et ya moins de code à écrire.
Bon c pas un truc extraordinaire.... mais en dernier recours  
fo bien sortir quelquechose.
 
Donc voilà ... Merci à Rolland pour avoir
consacré du temps à tester des tas de fois mes bouts de  
code erroné... sniff.
 
Bonne soirée tout le monde!!!! :hello:  
 

n°825705
roland77
Posté le 18-08-2004 à 11:29:50  profilanswer
 

en fait j'ai rectifié mon post, j'avais fais ca comme erreur :  
j'avais mis "C:\Bureau\toto.xls" comme nom de fichier au lieu de "C:\\Bureau\\toto.xls"
 
Ca fais newbie quand même mais bon :)
sinon, j'pense que c'est la meilleure idée d'ouvrir un fichier déja préformaté, ca coute moins cher en code comme tu dis :)
 
Y'a pas de probs, j'ai besoin d'aider mais si je peux aider aussi chuis la :)
D'ailleurs si t'as un bout de code à faire tester, n'hésite pas. Surtout que tu m'as tellement aider pour la partie sur COM, maintenant j'ai l'impression d'avoir appris qqch de plus consistant dans mon stage;)
 
 
Astalavista !


---------------
http://www.lolos.fr/
n°1839856
jyany
Posté le 19-01-2009 à 10:13:33  profilanswer
 

bjr,
le code de lecture marche bien merci mais j'aimerai lire tous les lignes et colonnes du feuille excel sans savoir les données.est-ce possible?merci de me donner le code

n°1839919
rufo
Pas me confondre avec Lycos!
Posté le 19-01-2009 à 13:07:46  profilanswer
 

Petits rappels sur COM : ça peut paraître évident, mais le serveur de production doit être sous windows et avoir Excel d'installé. Et, a moins que ça n'ait été corrigé depuis, l'implémentation de COM dans PHP souffre d'un pb de désallocation de mémoire : quand on demande la fermeture d'Excel puis la libération mémoire, le processus Excel.exe reste en mémoire du serveur... Donc, dans un environnement de prod, COM n'est pas conseillé. C'est bien pour faire de l'import de données ponctuellement et avant la mise en prod ;) Pour avoir importé plusieurs 100ène de fichiers Excel dans une BD Mysql, j'en sais qq chose. Je devais le faire par lots de qq fichiers, sinon, la RAM était saturée d'Excel.exe :(...


---------------
Astres, outil de help-desk GPL : http://sourceforge.net/projects/astres, ICARE, gestion de conf : http://sourceforge.net/projects/icare, Outil Planeta Calandreta : https://framalibre.org/content/planeta-calandreta
mood
Publicité
Posté le   profilanswer
 


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  PHP

  Parcours d'un fichier Excel

 

Sujets relatifs
Après macro, taper des caractéres renvoie dans le menu (Excel)[batch]Réccupérer la date de création/modification d'un fichier,
Mettre le contenu d'un fichier dans une variableEXCEL/PHP propriétés non accessibles (PIA?)
Enregistrement d'un fichier Excel+processus non tuéAfficher les valeurs d'un tableau Excel sous forme de cercles ?
mettre le résultat d'une requete SQL dans un fichier Excel?Macro dans Excel permettant de voir si un fichier est ouvert
Plus de sujets relatifs à : Parcours d'un fichier Excel


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR