Bonjour !

Je suis confronté à un petit problème.

Une personne m'a demandée si je pouvais lui faire un système de recherche. Il possède un fichier Excel contenant une liste de magasins (nom, adresse, ville, etc) et travaille sous Web Accapella. J'ai déjà compris comment j'allais faire pour modifier les pages afin d'y inclure du PHP mais étant donné qu'il a ce fichier Excel et qu'il ne sait pas trop comment se servir d'une base de données, je me demandais s'il était possible de faire des recherches précises sur un fichier Excel tel que sur une base de données.

Ainsi, quelqu'un qui vient sur son site, recherche un magasin (différent inputs afin qu'il puisse rechercher en fonction du nom ou en fonction de l'adresse, etc) et cela lui affiche toutes les informations du magasin.

Je me suis déjà renseigné mais il me semblait que ce n'était pas possible (uniquement des recherches sur une ou plusieurs cellules) mais comme sur ce forum, il y a toujours un de vous qui a une solution magique, je teste.. :)

Sinon, si cela n'est vraiment pas possible, je me disais que je pourrais créer un script qui serait exécuté toutes les 24h par exemple (via les tâches Cron) et qui récupèrerais toutes les colonnes et lignes du fichier Excel pour les insérer en base de données. Ainsi, la personne continue à utiliser son fichier Excel normalement et le script met à jour son fichier régulièrement et moi, je n'ai plus qu'à faire un simple script de recherche.

Mais me voilà confronté à un autre problème : je ne sais pas comment lire un fichier Excel.. j'ai beau chercher sur la doc de PHPExcel, je ne la trouve pas très claire..

Auriez-vous une idée ?

Merci
Ranarxhag

8 réponses


Salut!

Si je te suis bien tu as un projet où le client veut modifier un excel qui servirait de bdd à un site qui doit du coup baser toute ça data dessus. C'est bien ça ?

Quelques questions :

  • Pourquoi le client est-il retissant à l'idée d'utiliser une bdd web ?
  • Pourquoi ne pas constuire une interface admin sur mesure (visuellement proche d'un tableur excel par exemple) ?

En ce qui concerne PHPExcel, je l'ai utilisé plusieurs fois pour des actions assez simple (génération de doc surtout), mais en tout cas tu ne pourras jamais avoir de bonnes performance en ce qui concerne une requete bdd sur un excel. La librairie PHPExcel sert surtout de traducteur entre le fichier excel et une bdd quelconque.

Le mieux que je puisse te dire si vraiment le client tient à son fichier excel c'est de lui dire de l'uploader via une mini interface admin pour mettre à jour la bdd (via PHPExcel donc..). A la différence d'un cron, la mis à jour sera immédiate et on aura pas à attendre 24h que l'update se fasse.

Ensuite pour comment fonctionne cette librairie, le mieux c'est que tu regardes de tres pres les exemples sur le debot github et que t'y touche un peu sur un serv perso. Je suis loin d'etre un expert mais c'est comme ça que j'ai saisi un peu le truc. Apres si tu as des questions plus précises sur le sujet ce sera plus simple d'y repondre ;)

Ca doit être super interessant comme projet ça :). Et ça retourne quoi un get_file_contents sur un fichier Excel? Et un readfile? Tu pourrais te debrouiller pour le convertir en objet et update ta base, comme le dis Canonier, à l'upload via un panneau d'admin. Ou si le gars veut seulement passer par FTP, ben tu le fais a chaque recherche effectuée.. J'ai eu un projet similaire sur lequel les infos etaient stockées en xml qui était uploadées direct sur le serveur en ftp, j'ai opté pour la mise à jour de la base a chaque recherche.

J'ai opté pour la mise à jour de la base a chaque recherche.

Salut Semeen,
Une telle solution n'est-elle pas trop lourde pour le serveur ? Si ton xml par exemple est sacrément gros ton utilisateur va devoir attendre que le process de MAJ se finisse avant de voir son résultat affiché, n'est ce pas ? Tu avait pensé à une solution pour palier à ça du coup ?

héhé, tu m'as mis le doute alors j'ai réouvert mon code ^^. Et j'ai bien fait, je n'ai pas utilisé de bdd, j'ai stocké les infos dans un objet et j'appelais la ligne demandée pour afficher les infos.

Bon, mon cas était different étant donné que c'etait un fixhier xml, mais je pense qu'une solution est possible pour un fichier excel. Un readfile devrait lui retourner des clés non? Avec ces clés, il stocke dans un objet, et se code un petit script de recherche qui va chercher la clé de tous les contenus correspondants et les affiche.

Petite piste, en gros : je créais l'objet, j'appelais une fonction avec en parametres toutes les recherches effectuée, je faisais un foreach sur l'objet, et si les parametres de la ligne courante n'étaient pas égaux aux parametres demandés, je supprimais la ligne. Donc le tout, sans base de donnée. J'espère pouvoir t'aider avec cet exemple

//traitement de l'objet xml selon la recherche et organisation struturelle
include_once 'xml_organizer.php';
$xml = xml_organizer($xml_before,$provenance,$dossier,$searched_region,$searched_metier,$searched_ville,$searched_id);

Extrait de xml_organizer :

//une fois le tableau de TOUTES les offres créées, on tri selon la recherche
  //Si au moins une condition a été transmise
  if( (isset($searched_id) && !empty($searched_id)) OR (isset($entreprise) && !empty($entreprise)) OR (isset($searched_region) && !empty($searched_region)) OR (isset($searched_metier) && !empty($searched_metier)) OR !empty($searched_ville))
  {
    //On parcoure le tableau
    foreach($organizer as $key=>$org)
    {
      //si un id d'offre a été renseigné
      if(isset($searched_id) && !empty($searched_id))
      {
        if(intval(trim($org['id']))!==intval(trim($searched_id)))
        {
          unset($organizer[$key]);
        }
      }
      .......

C'est vrai que cette solution peut marcher mais uniquement avec un faible total de donnée. Si jamais faut stoquer tous les magasins de France et de Navarre ou bien de l'U.E... ou du monde :O ...bref le system tiendra pas si la quantité de donnée devient trop grosse. En tout cas l'utilisateur va en payer le prix, et ton serveur risque de stoper le process parce qu'il sera trop long :/

Non non je t'assure que ça tourne bien ^^ ce systême est appliqué sur une liste xml d'offres d'emplois assez fournie (je peux pas te donner le lien étant donné que j'ai quitté l'agence web et que le site n'est toujours pas validé, d'ailleurs rien a bougé depuis deux mois ^^) et ça tourne niquel