Plugin Itérateur XLS : utiliser des fichier Excel ou OpenOffice dans les boucles DATA

Ce plugin permet d’utiliser des fichiers Excel (XLS/XLSX) ou OpenOffice/LibreOffice (ODS) dans des boucles DATA de SPIP.

Installation

Si vous n’avez pas déjà le dépôt externals dans votre SPIP, ajoutez le dépôt https://files.spip.net/externals/archives_externals.xml pour trouver le plugin automatiquement.

Qu’apporte ce plugin ?

Les boucles DATA de SPIP permettent de boucler facilement sur du contenu non SPIP. Ce plugin permet de le faire sur des fichiers Excel ou OpenOffice/LibreOffice.

Exemple de boucle

Soit un tableau présenté de la manière suivante :

Nom Prénom Email Téléphone
Dupont Jean jean.dupont@fai.fr 01 23 45 67 89
Durand Pierre pierre.durand@hebergeur.fr 06 12 34 56 78

Vous pouvez accéder aux données de votre tableau comme ceci :

<BOUCLE_donnees(DATA){source xls,monfichier.xls}>
Nom : #NOM<br>
Prénom : #PRENOM<br>
Email : #EMAIL<br>
Téléphone : #TELEPHONE
</BOUCLE_donnees>

Le nom des balises SPIP reprend la première ligne du tableau (en enlevant les accents le cas échéant).

Attention : si votre fichier est au format XLSX ou ODS, il faut modifier ce qui est indiqué après source comme suit :

<BOUCLE_donnees(DATA){source xlsx,monfichier.xlsx}>
<BOUCLE_donnees(DATA){source ods,monfichier.ods}>

Crédits

Ce plugin est basé sur deux librairies : spreadsheet-reader de Martins Pilsetnieks et Spreadsheet_Excel_Reader. Les librairies sont distribuée avec le plugin.

Comment contribuer ?

Le plugin est disponible sur GitHub pour vos forks : https://github.com/cahri/spip-itera....

Discussion

8 discussions

  • Bonjour,

    Les années passent et Spip rajeunit ! ;-)

    Est-ce que le plugin sera compatible avec la version 4.0 ?... Au pire, j’essaierai sur mon projet en dev plus tard :-)

    Merci

    Répondre à ce message

  • 5

    Bonjour, existe-t-il une version pour Spip 3.2 ?
    Merci ;-)

    • Salut,

      le plugin n’a pas été testé pour SPIP 3.2. Cela ne signifie pas qu’il n’est pas compatible, mais qu’on ne sait pas s’il l’est où pas. Tu peux faire toi même le test en modifiant dans le paquet.xml

      compatibilite="[3.0.0;3.1.*]"

      Par

      compatibilite="[3.0.0;3.2.*]"

      Cela te permettra d’activer le plugin. Tu pourras ensuite faire un retour ici, après test, et le cas échéant on marquera le plugin comme compatible.

    • Bonjour, voilà, juste pour signaler que j’ai fait la migration de mon site sous spip 3.2 en local, que j’ai modifié les bornes du fichier plugin.xml de 3.1.* à 3.2.* et que cela fonctionne nickel chrome !

      Merci pour cet itérateur !

    • Super, je modifie la version distribuée du coup

      (mais je ne suis pas à l’origine du plugin)

    • arf non je ne peux pas faire la modif car ce n’est pas develloé sur l’espace communautaire de SPIP. Bon, je vais faire la pull requesr

    • Merci pour la compatibilité, j’ai mis à jour le plugin et je pousse sur la zone.

    Répondre à ce message

  • Plugin super intéressant

    Est-il aussi possible d’accéder aux titres des colonnes ?
    Dans le genre :
    [(#col_A|titre)]

    Merci

    Répondre à ce message

  • 3

    Bonjour, merci pour ta contribution très utile et simple à utiliser

    Petits bugs :
    ligne 12 inc/ods_to_array.php
    Il manque un include_spip('lib/spreadsheet-reader/SpreadsheetReader');
    pour pouvoir utiliser des .ods

    Et pour pouvoir en profiter sur des .csv, si tu veux bien créer le inc/csv_to_array.php et y mettre

    <?php
    
    function inc_ods_to_array_dist($data, $options = []) {
    
    	if ($data) {
    
    		$file = _DIR_CACHE.uniqid('csv');
    
    		file_put_contents($file, $data);
    		unset($data);
    
    		include_spip('lib/spreadsheet-reader/SpreadsheetReader');
    		$reader = new SpreadsheetReader($file, 'dummy.csv', 'text/csv');
    
    		$datas = iterateur_xls_convert($reader);
    
    		unlink($file);
    
    		return $datas;
    
    	}
    
    }

    Par contre, le CSV n’élimine pas la première ligne !
    En tout cas, c’est bien pratique comme plugin !
    Et promis, je commiterai sur github la prochaine fois si tu m’y autorises !

    • Bonjour,

      C’est corrigé pour la librairie manquante pour les ods sur la version 1.0.5.

      Pour le CSV, SPIP le gère déjà très bien ;)

      A bientôt !

    • Effectivement !
      Merci
      concernant le lien de la doc sur paquet.xml l’URL est iterateur-xls et non iterateur_xls
      ++

    • Bien vu touti : le lien sera mis à jour à la prochaine release et en attendant j’ai fait une redirection ;)

    Répondre à ce message

  • 1

    Bonjour,

    Je tente d’utiliser la méthode :
    soit un appel dans un article du modele deliberation.html sous la forme :

    <deliberations|id_document==9203>

    Dans le modele en question se trouve :

    id doc : #ENV{id_document}
    <BOUCLE_documents(DOCUMENTS){id_document}{extension==xls}>
    	<BOUCLE_donnees(DATA){source xls, #FICHIER}>
    		NUMERO : #NUMERO<br>
    		TITRE : #TITRE<br>
    		RAPPORTEUR : #RAPPORTEUR<br>
    		DELIBERATION : #DELIBERATION <hr>
    	</BOUCLE_donnees>
    </BOUCLE_documents>

    N’affiche que l’id_document ... le fichier est bien présent, bien formaté, sans lignes ni colonnes qui dépassent, les noms de colonnes correspondent ...

    Besoin d’aide, Je sèche !

    SPIP 3.1.1 [22913] + écran de sécurité 1.2.4

    • Bonjour,

      Peux-tu vérifier que le code suivant fonctionne bien ?

      	<BOUCLE_donnees(DATA){source xls, cheminverstonfichier.xls}>
      		NUMERO : #NUMERO<br>
      		TITRE : #TITRE<br>
      		RAPPORTEUR : #RAPPORTEUR<br>
      		DELIBERATION : #DELIBERATION <hr>
      	</BOUCLE_donnees>

      Est-ce bien un fichier XLS et non un XLSX (essaye peut être avec xlsx comme source) ?

      A bientôt !

    Répondre à ce message

  • 5

    Ne fonctionne sur, sur un 3.0.20 mutualisé.

    File (tmp/cache/xls5702799965bb5) not readable

    J’ai commencé a regardé il s’agirait d’un problème de chemin mal défini !

    Merci quand même.

    Je retourne a mes CSV faute de temps :(

    • je pense qu’en remplacant dans les fichiers les appels directe à ’tmp/cache’ par _DIR_CACHE cela devrait marcher.

    • en fait cela devrait plutot être

      NOM_TEMPORAIRES_INACCESSIBLES._DIR_CACHE qui doit remplacer 'tmp/cache/'

    • non, juste mettre _DIR_CACHE, pas NOM_TEMPORAIRES_INACCESSIBLES._DIR_CACHE

    • @Pierrox : c’est résolu sur la 1.0.4 qui ne devrait pas tarder à arriver sur la zone.

      @Maïeul : merci pour le bug-report ;)

    • Yes, Merci à toi !

    Répondre à ce message

  • 3
    Pascual

    Merci, c’est bien plus clair pour moi maintenant.

    Juste un dernier détail : où dois-je déposer le fichier monfichier.xls, dans le dossier squelettes ou à la racine du site ?

    • Le chemin est par rapport à la racine de SPIP, donc si tu le mets dans squelettes il te faudra faire :
      <BOUCLE_donnees(DATA){source xls,squelettes/monfichier.xls}>

    • Si je peux me permette, il vaudrait mieux utiliser #CHEMIN{monfichier.xls}. D’une manière générale c’est une bonne méthode de ne pas mettre les chemins en dur dans SPIP.

      Il vaut mieux également ne jamais rien mettre à la racine du site, et tout mettre dans squelettes.
      Par ailleurs, a priori il doit être possible de faire un modèle qui permette de chercher un fichier ajouté comme document joint.

      Quelque chose comme :

      <BOUCLE_documents(DOCUMENTS){id_document}{type=xls}>
      <BOUCLE_donnees(DATA){source xls, #FICHIER}>
      …
      </BOUCLE_donnees>
      </BOUCLE_documents>

      a mettre dans le squelettes/modeles et à appeler via <nomdumodele|id_document=xxx>

      cf http://www.spip.net/fr_article3454.html (et aussi Plugin Insérer Modèles.

    • Pascual

      Merci à vous deux, c’est top :)

    Répondre à ce message

  • 1
    Pascual

    Bonjour Julien,

    Ne maitrisant que peu les boucles DATA : serait-il possible que tu nous donnes un exemple concret/détaillé d’une telle boucle avec un fichier Excel type simplissime (nom, prénom, tél, email), stp ?

    T’en remerciant par avance.

    • Bonjour Pascual,

      J’ai réécrit un peu le texte en donnant un exemple concret, tiens moi au courant si ce n’est pas assez clair :)

      Bonne journée !

    Répondre à ce message

Ajouter un commentaire

Avant de faire part d’un problème sur un plugin X, merci de lire ce qui suit :

  • Désactiver tous les plugins que vous ne voulez pas tester afin de vous assurer que le bug vient bien du plugin X. Cela vous évitera d’écrire sur le forum d’une contribution qui n’est finalement pas en cause.
  • Cherchez et notez les numéros de version de tout ce qui est en place au moment du test :
    • version de SPIP, en bas de la partie privée
    • version du plugin testé et des éventuels plugins nécessités
    • version de PHP (exec=info en partie privée)
    • version de MySQL / SQLite
  • Si votre problème concerne la partie publique de votre site, donnez une URL où le bug est visible, pour que les gens puissent voir par eux-mêmes.
  • En cas de page blanche, merci d’activer l’affichage des erreurs, et d’indiquer ensuite l’erreur qui apparaît.

Merci d’avance pour les personnes qui vous aideront !

Par ailleurs, n’oubliez pas que les contributeurs et contributrices ont une vie en dehors de SPIP.

Qui êtes-vous ?
[Se connecter]

Pour afficher votre trombine avec votre message, enregistrez-la d’abord sur gravatar.com (gratuit et indolore) et n’oubliez pas d’indiquer votre adresse e-mail ici.

Ajoutez votre commentaire ici

Ce champ accepte les raccourcis SPIP {{gras}} {italique} -*liste [texte->url] <quote> <code> et le code HTML <q> <del> <ins>. Pour créer des paragraphes, laissez simplement des lignes vides.

Ajouter un document

Suivre les commentaires : RSS 2.0 | Atom