IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Développement de jobs Discussion :

Composant tFileInputExcel : exporter le nom de tous les onglets d'un fichier Excel


Sujet :

Développement de jobs

  1. #1
    Membre actif
    Profil pro
    Gestionnaire de données
    Inscrit en
    Mars 2006
    Messages
    356
    Détails du profil
    Informations personnelles :
    Localisation : France, Loiret (Centre)

    Informations professionnelles :
    Activité : Gestionnaire de données
    Secteur : Service public

    Informations forums :
    Inscription : Mars 2006
    Messages : 356
    Points : 248
    Points
    248
    Par défaut Composant tFileInputExcel : exporter le nom de tous les onglets d'un fichier Excel
    Bonjour,

    Le composant tFileInputExcel permet-il d'exporter dans un fichier texte la liste des noms de tous les onglets d'un fichier Excel ? Si oui , comment svp ?

    versions :
    TOS 4.0.0
    Excel 2003

    Merci d'avance pour votre aide.

    Jean-Philippe

  2. #2
    atb
    atb est déconnecté
    Membre éprouvé

    Homme Profil pro
    Inscrit en
    Novembre 2004
    Messages
    639
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : Autre

    Informations forums :
    Inscription : Novembre 2004
    Messages : 639
    Points : 929
    Points
    929
    Par défaut
    Bonjour, je te propose ceci :

    tFileInputExcel1 ---> Flux Iterate ----> Tjava ---> Flux Main ---> tJavaRow, avec une colonne en sortie output_row.SHEETNAME=((String)globalMap.get("tFileInputExcel_1_CURRENT_SHEET"));
    Ensuite récupérer cette colonne vers un fichier .txt par exemple

    Seul souci c’est qu’il faut définir au moins une colonne dans le schéma en entrée de l’InputExcel et il faut qu’il y est au moins une ligne lues pour chaque onglet.

  3. #3
    Membre habitué
    Profil pro
    Consultant informatique
    Inscrit en
    Mars 2003
    Messages
    132
    Détails du profil
    Informations personnelles :
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Consultant informatique

    Informations forums :
    Inscription : Mars 2003
    Messages : 132
    Points : 199
    Points
    199
    Par défaut
    Ok la version d'atb marche... mais ca revient a charger tout un fichier juste pour avoir le nom des feuilles.
    L'intérêt de l'outil talend est qu'il genère du code JAVA
    Utilise donc une librairie java !
    exemple jexcelapi
    utilise le composant tLibraryLoad pour charger la librairie le "jxl.jar"
    If Component Ok
    --> tjavaFlex
    Dans l'init :
    Workbook w= Workbook.getWorkbook(new File("PATH"));

    for (int i=0;i<w.getSheetNames().length;i++){
    Dans la loop :

    row1.name=((String)(w.getSheetNames()[i]));

    dans la fin:

    }
    parametre avancé :
    import java.io.File;
    import jxl.Workbook;

    le schema:
    name String

    Et voila tu as un flux des nom de tes feuille de ton fichier!!!!

    Talend c bien ca fais plein de choses , ca évite de coder ect...
    Mais bon parfois faut pas oublier que le java ca existe !

  4. #4
    Membre actif
    Profil pro
    Gestionnaire de données
    Inscrit en
    Mars 2006
    Messages
    356
    Détails du profil
    Informations personnelles :
    Localisation : France, Loiret (Centre)

    Informations professionnelles :
    Activité : Gestionnaire de données
    Secteur : Service public

    Informations forums :
    Inscription : Mars 2006
    Messages : 356
    Points : 248
    Points
    248
    Par défaut Pb sur l'iterate
    D'abord merci pour la réponse , cela m'a permis d'utiliser dans un Tmap la formule ((String)globalMap.get("tFileInputExcel_1_CURRENT_SHEET"))
    ( j'ai du mal avec les composants java , je préfère ne pas trop entrer dans la programmation).

    J'ai un pb sur le flux Iterate .

    Pour l'instant j'ai juste fait :

    tFileInputExcel1 ---> Flux Iterate ----> Tjava

    Mon fichier Excel a 4 onglets , mais quand j'exécute le job , Talend affiche sur le flux Iterate : 1 exec finished.

    Il n'a donc l'air de lire que le 1er onglet du fichier Excel.

    Dans le composant tFileInputExcel1 , j'ai coché "Toutes les feuilles" et aussi "Affecte chaque feuille" ( à quoi ça sert ?) , mais ça n'itère pas sur les onglets.

  5. #5
    atb
    atb est déconnecté
    Membre éprouvé

    Homme Profil pro
    Inscrit en
    Novembre 2004
    Messages
    639
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : Autre

    Informations forums :
    Inscription : Novembre 2004
    Messages : 639
    Points : 929
    Points
    929
    Par défaut
    Ok la version d'atb marche... mais ca revient a charger tout un fichier juste pour avoir le nom des feuilles
    Pas forcement. Il suffit de lire que la première cellule par exemple (Limit = 1, last et first column =1)

    jeanphi45 Il te faut le tjavaRow après, où tu récupère cette variable (CURRENT_SHEET)

  6. #6
    Membre actif
    Profil pro
    Gestionnaire de données
    Inscrit en
    Mars 2006
    Messages
    356
    Détails du profil
    Informations personnelles :
    Localisation : France, Loiret (Centre)

    Informations professionnelles :
    Activité : Gestionnaire de données
    Secteur : Service public

    Informations forums :
    Inscription : Mars 2006
    Messages : 356
    Points : 248
    Points
    248
    Par défaut récapitulons ...
    Etape 1 : Qu'est-ce que je mets dans le composant tJava ?

    Par défaut , il y a

  7. #7
    atb
    atb est déconnecté
    Membre éprouvé

    Homme Profil pro
    Inscrit en
    Novembre 2004
    Messages
    639
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : Autre

    Informations forums :
    Inscription : Novembre 2004
    Messages : 639
    Points : 929
    Points
    929
    Par défaut
    Rien ! La variable CURRENT_SHEET pendant l'itération est accessible.

    C'est juste qu'on peut pas utiliser le Iterate avec le tJavaRow ! Donc on passe par un tJava.

  8. #8
    Membre actif
    Profil pro
    Gestionnaire de données
    Inscrit en
    Mars 2006
    Messages
    356
    Détails du profil
    Informations personnelles :
    Localisation : France, Loiret (Centre)

    Informations professionnelles :
    Activité : Gestionnaire de données
    Secteur : Service public

    Informations forums :
    Inscription : Mars 2006
    Messages : 356
    Points : 248
    Points
    248
    Par défaut récapitulons ... étape 2
    étape 2 :

    pourquoi le flux iterate n'itère pas ?

    En effet , Talend affiche sur le flux Iterate : 1 exec finished ,

    alors que j'ai 4 onglets dans mon fichier excel.

  9. #9
    atb
    atb est déconnecté
    Membre éprouvé

    Homme Profil pro
    Inscrit en
    Novembre 2004
    Messages
    639
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : Autre

    Informations forums :
    Inscription : Novembre 2004
    Messages : 639
    Points : 929
    Points
    929
    Par défaut
    Tu peux faire un test. Mets ceci dans le tJava:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    System.out.println( (String)globalMap.get("tFileInputExcel_1_CURRENT_SHEET") );
    Ce qui va imprimer à chaque itération le nom de l'onglet en cours dans la console.
    Mais il faut que tu as au moins une cellule lue au niveau de chaque onglet. Par exemple A1. Lorsque tu parametres le input tu mets Limit =1 , First colonne =1 et Last colonne =1. Ajoute une colonne de type String par exemple dans le schéma. Et coche bien "All sheets"

  10. #10
    Membre actif
    Profil pro
    Gestionnaire de données
    Inscrit en
    Mars 2006
    Messages
    356
    Détails du profil
    Informations personnelles :
    Localisation : France, Loiret (Centre)

    Informations professionnelles :
    Activité : Gestionnaire de données
    Secteur : Service public

    Informations forums :
    Inscription : Mars 2006
    Messages : 356
    Points : 248
    Points
    248
    Par défaut résultat du test
    Seul le nom du 1er onglet s'affiche.

    J'ai testé en cochant et en décochant "Affecte chaque feuille" : même résultat.

  11. #11
    atb
    atb est déconnecté
    Membre éprouvé

    Homme Profil pro
    Inscrit en
    Novembre 2004
    Messages
    639
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : Autre

    Informations forums :
    Inscription : Novembre 2004
    Messages : 639
    Points : 929
    Points
    929
    Par défaut
    Tu peux joindre des captures d'écran ?

  12. #12
    Membre actif
    Profil pro
    Gestionnaire de données
    Inscrit en
    Mars 2006
    Messages
    356
    Détails du profil
    Informations personnelles :
    Localisation : France, Loiret (Centre)

    Informations professionnelles :
    Activité : Gestionnaire de données
    Secteur : Service public

    Informations forums :
    Inscription : Mars 2006
    Messages : 356
    Points : 248
    Points
    248
    Par défaut impressions ecran
    les voici :
    Images attachées Images attachées   

  13. #13
    atb
    atb est déconnecté
    Membre éprouvé

    Homme Profil pro
    Inscrit en
    Novembre 2004
    Messages
    639
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : Autre

    Informations forums :
    Inscription : Novembre 2004
    Messages : 639
    Points : 929
    Points
    929
    Par défaut
    Essaye de remplacer le tJava par un tLogRow et le flux iterate par un flux main. Pour voir s'il arrive à lire toutes les valeurs dans les différents onglets ?

  14. #14
    Membre actif
    Profil pro
    Gestionnaire de données
    Inscrit en
    Mars 2006
    Messages
    356
    Détails du profil
    Informations personnelles :
    Localisation : France, Loiret (Centre)

    Informations professionnelles :
    Activité : Gestionnaire de données
    Secteur : Service public

    Informations forums :
    Inscription : Mars 2006
    Messages : 356
    Points : 248
    Points
    248
    Par défaut résultat du test
    Toujours pas d'itération :

    Seul le contenu de la cellule C4 du 1er onglet s'affiche.

    ... et le job affiche "1 row in 0s"

    Finalement , peut-on faire un flux iterate après un Composant tFileInputExcel ?

    Vous arrivez à le faire ? (avec un résultat probant bien sûr)

  15. #15
    atb
    atb est déconnecté
    Membre éprouvé

    Homme Profil pro
    Inscrit en
    Novembre 2004
    Messages
    639
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : Autre

    Informations forums :
    Inscription : Novembre 2004
    Messages : 639
    Points : 929
    Points
    929
    Par défaut
    Bonjour,

    Je te laisse regarder ce que j'ai fais. Mon fichier Excel contient 3 onglets (F1, F2 et F3). Chacun contient une donnée dans la cellule A1 ("A" par exemple).
    Images attachées Images attachées  

  16. #16
    Membre actif
    Profil pro
    Gestionnaire de données
    Inscrit en
    Mars 2006
    Messages
    356
    Détails du profil
    Informations personnelles :
    Localisation : France, Loiret (Centre)

    Informations professionnelles :
    Activité : Gestionnaire de données
    Secteur : Service public

    Informations forums :
    Inscription : Mars 2006
    Messages : 356
    Points : 248
    Points
    248
    Par défaut Iterate OK !
    Merci pour ton aide !


    L'erreur provenait de mon composant tFileInputExcel.

    J'avais mis 1 à Limite , donc le job s'arrêtait dès la 1ère cellule excel.

    Je viens d'enlever cette limite et ça boucle : tous les onglets du fichier excel sont parcourus par le job.

    Seul petit pb (pour le temps d'execution du job) , le job lit toutes les cellules qui sont sous la cellule A1 jusqu'au bas de chaque onglet.

    Je vais regarder comment optimiser (car en fait je dois traiter tout un répertoire de fichiers excel )

  17. #17
    Membre actif
    Profil pro
    Gestionnaire de données
    Inscrit en
    Mars 2006
    Messages
    356
    Détails du profil
    Informations personnelles :
    Localisation : France, Loiret (Centre)

    Informations professionnelles :
    Activité : Gestionnaire de données
    Secteur : Service public

    Informations forums :
    Inscription : Mars 2006
    Messages : 356
    Points : 248
    Points
    248
    Par défaut Obligé de lire toutes les lignes du fichier Excel ?
    Même en jouant sur les différents paramètres du composant tFileInputExcel , je crains qu'on soit obligé de lire toutes les lignes du fichier Excel .

    Tant pis , ce n'est pas un job que je lance 40 fois par jour.

  18. #18
    atb
    atb est déconnecté
    Membre éprouvé

    Homme Profil pro
    Inscrit en
    Novembre 2004
    Messages
    639
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : Autre

    Informations forums :
    Inscription : Novembre 2004
    Messages : 639
    Points : 929
    Points
    929
    Par défaut
    Tu peux mettre limite à 2. ça correspond au nombre de lignes lues. Footer à la dernière ligne (>= 2) a toi de voir

    Sinon si c'est résolu un petit

    EDIT: Au temps pour je n'avais jamais testé ce point. Limit correspond peut être à autre chose que le nombre de ligne.

  19. #19
    Membre actif
    Profil pro
    Gestionnaire de données
    Inscrit en
    Mars 2006
    Messages
    356
    Détails du profil
    Informations personnelles :
    Localisation : France, Loiret (Centre)

    Informations professionnelles :
    Activité : Gestionnaire de données
    Secteur : Service public

    Informations forums :
    Inscription : Mars 2006
    Messages : 356
    Points : 248
    Points
    248
    Par défaut
    Mon fichier Excel a plusieurs lignes par onglet.

    Si je mets limite à 2 , le job s'arrête à la cellule A2 du 1er onglet , et donc ne va pas lire les autres onglets.

  20. #20
    atb
    atb est déconnecté
    Membre éprouvé

    Homme Profil pro
    Inscrit en
    Novembre 2004
    Messages
    639
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : Autre

    Informations forums :
    Inscription : Novembre 2004
    Messages : 639
    Points : 929
    Points
    929
    Par défaut
    Effectivement, c'est vraiment bizarre

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 2
    Dernier message: 08/08/2014, 12h51
  2. Boucler sur tous les onglets d'un fichier Excel
    Par CocoAntoine dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 03/03/2012, 13h08
  3. Réponses: 2
    Dernier message: 08/07/2010, 09h44
  4. [XL-2007] Afficher tous les graphiques d'un fichier excel dans un diaporama
    Par theos37 dans le forum Excel
    Réponses: 4
    Dernier message: 27/10/2009, 20h11
  5. Parcourir tous les onglets d'un fichier?
    Par drthodt dans le forum Macros et VBA Excel
    Réponses: 5
    Dernier message: 18/06/2008, 12h23

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo