Précédent   Forum des professionnels en informatique > Logiciels > Solutions d'entreprise > Business Intelligence > ETL > Talend
Talend Forum d'entraide sur Talend (Talend Open Studio, ...). Avant de poster --> FAQ Talend, Tutoriels Talend
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 13/12/2010, 14h14   #1
Membre habitué
 
Jean-Philippe CHENU
Inscription : mars 2006
Messages : 197
Détails du profil
Informations personnelles :
Nom : Jean-Philippe CHENU
Localisation : France, Loiret (Centre)

Informations forums :
Inscription : mars 2006
Messages : 197
Points : 110
Points : 110
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
jeanphi45 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 13/12/2010, 15h12   #2
atb
Membre chevronné
 
Homme
Inscription : novembre 2004
Messages : 569
Détails du profil
Informations personnelles :
Sexe : Homme
Âge : 28
Localisation : Autre

Informations forums :
Inscription : novembre 2004
Messages : 569
Points : 696
Points : 696
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.
atb est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 13/12/2010, 16h01   #3
Membre actif
 
Consultant informatique
Inscription : mars 2003
Messages : 130
Détails du profil
Informations personnelles :
Localisation : France, Nord (Nord Pas de Calais)

Informations professionnelles :
Activité : Consultant informatique

Informations forums :
Inscription : mars 2003
Messages : 130
Points : 181
Points : 181
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 !
kisskool45 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 13/12/2010, 16h13   #4
Membre habitué
 
Jean-Philippe CHENU
Inscription : mars 2006
Messages : 197
Détails du profil
Informations personnelles :
Nom : Jean-Philippe CHENU
Localisation : France, Loiret (Centre)

Informations forums :
Inscription : mars 2006
Messages : 197
Points : 110
Points : 110
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.
jeanphi45 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 13/12/2010, 16h24   #5
atb
Membre chevronné
 
Homme
Inscription : novembre 2004
Messages : 569
Détails du profil
Informations personnelles :
Sexe : Homme
Âge : 28
Localisation : Autre

Informations forums :
Inscription : novembre 2004
Messages : 569
Points : 696
Points : 696
Citation:
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)
atb est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 13/12/2010, 16h57   #6
Membre habitué
 
Jean-Philippe CHENU
Inscription : mars 2006
Messages : 197
Détails du profil
Informations personnelles :
Nom : Jean-Philippe CHENU
Localisation : France, Loiret (Centre)

Informations forums :
Inscription : mars 2006
Messages : 197
Points : 110
Points : 110
Par défaut récapitulons ...

Etape 1 : Qu'est-ce que je mets dans le composant tJava ?

Par défaut , il y a
jeanphi45 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 13/12/2010, 17h02   #7
atb
Membre chevronné
 
Homme
Inscription : novembre 2004
Messages : 569
Détails du profil
Informations personnelles :
Sexe : Homme
Âge : 28
Localisation : Autre

Informations forums :
Inscription : novembre 2004
Messages : 569
Points : 696
Points : 696
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.
atb est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 13/12/2010, 17h08   #8
Membre habitué
 
Jean-Philippe CHENU
Inscription : mars 2006
Messages : 197
Détails du profil
Informations personnelles :
Nom : Jean-Philippe CHENU
Localisation : France, Loiret (Centre)

Informations forums :
Inscription : mars 2006
Messages : 197
Points : 110
Points : 110
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.
jeanphi45 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 13/12/2010, 17h15   #9
atb
Membre chevronné
 
Homme
Inscription : novembre 2004
Messages : 569
Détails du profil
Informations personnelles :
Sexe : Homme
Âge : 28
Localisation : Autre

Informations forums :
Inscription : novembre 2004
Messages : 569
Points : 696
Points : 696
Tu peux faire un test. Mets ceci dans le tJava:

Code :
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"
atb est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 13/12/2010, 17h19   #10
Membre habitué
 
Jean-Philippe CHENU
Inscription : mars 2006
Messages : 197
Détails du profil
Informations personnelles :
Nom : Jean-Philippe CHENU
Localisation : France, Loiret (Centre)

Informations forums :
Inscription : mars 2006
Messages : 197
Points : 110
Points : 110
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.
jeanphi45 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 13/12/2010, 17h22   #11
atb
Membre chevronné
 
Homme
Inscription : novembre 2004
Messages : 569
Détails du profil
Informations personnelles :
Sexe : Homme
Âge : 28
Localisation : Autre

Informations forums :
Inscription : novembre 2004
Messages : 569
Points : 696
Points : 696
Tu peux joindre des captures d'écran ?
atb est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 13/12/2010, 17h32   #12
Membre habitué
 
Jean-Philippe CHENU
Inscription : mars 2006
Messages : 197
Détails du profil
Informations personnelles :
Nom : Jean-Philippe CHENU
Localisation : France, Loiret (Centre)

Informations forums :
Inscription : mars 2006
Messages : 197
Points : 110
Points : 110
Par défaut impressions ecran

les voici :
Images attachées
Type de fichier : png 2010-12-13_173008.png (5,3 Ko, 24 affichages)
Type de fichier : png 2010-12-13_173049.png (12,0 Ko, 19 affichages)
jeanphi45 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 13/12/2010, 17h34   #13
atb
Membre chevronné
 
Homme
Inscription : novembre 2004
Messages : 569
Détails du profil
Informations personnelles :
Sexe : Homme
Âge : 28
Localisation : Autre

Informations forums :
Inscription : novembre 2004
Messages : 569
Points : 696
Points : 696
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 ?
atb est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 14/12/2010, 09h43   #14
Membre habitué
 
Jean-Philippe CHENU
Inscription : mars 2006
Messages : 197
Détails du profil
Informations personnelles :
Nom : Jean-Philippe CHENU
Localisation : France, Loiret (Centre)

Informations forums :
Inscription : mars 2006
Messages : 197
Points : 110
Points : 110
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)
jeanphi45 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 14/12/2010, 10h17   #15
atb
Membre chevronné
 
Homme
Inscription : novembre 2004
Messages : 569
Détails du profil
Informations personnelles :
Sexe : Homme
Âge : 28
Localisation : Autre

Informations forums :
Inscription : novembre 2004
Messages : 569
Points : 696
Points : 696
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
Type de fichier : gif IterateExcel.GIF (59,6 Ko, 24 affichages)
atb est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 14/12/2010, 11h31   #16
Membre habitué
 
Jean-Philippe CHENU
Inscription : mars 2006
Messages : 197
Détails du profil
Informations personnelles :
Nom : Jean-Philippe CHENU
Localisation : France, Loiret (Centre)

Informations forums :
Inscription : mars 2006
Messages : 197
Points : 110
Points : 110
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 )
jeanphi45 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 14/12/2010, 11h59   #17
Membre habitué
 
Jean-Philippe CHENU
Inscription : mars 2006
Messages : 197
Détails du profil
Informations personnelles :
Nom : Jean-Philippe CHENU
Localisation : France, Loiret (Centre)

Informations forums :
Inscription : mars 2006
Messages : 197
Points : 110
Points : 110
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.
jeanphi45 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 14/12/2010, 12h00   #18
atb
Membre chevronné
 
Homme
Inscription : novembre 2004
Messages : 569
Détails du profil
Informations personnelles :
Sexe : Homme
Âge : 28
Localisation : Autre

Informations forums :
Inscription : novembre 2004
Messages : 569
Points : 696
Points : 696
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.
atb est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 14/12/2010, 12h02   #19
Membre habitué
 
Jean-Philippe CHENU
Inscription : mars 2006
Messages : 197
Détails du profil
Informations personnelles :
Nom : Jean-Philippe CHENU
Localisation : France, Loiret (Centre)

Informations forums :
Inscription : mars 2006
Messages : 197
Points : 110
Points : 110
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.
jeanphi45 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 14/12/2010, 12h06   #20
atb
Membre chevronné
 
Homme
Inscription : novembre 2004
Messages : 569
Détails du profil
Informations personnelles :
Sexe : Homme
Âge : 28
Localisation : Autre

Informations forums :
Inscription : novembre 2004
Messages : 569
Points : 696
Points : 696
Effectivement, c'est vraiment bizarre
atb est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 00h06.


 
 
 
 
Partenaires

Hébergement Web