|
Publicité ' | |||||||||||||||||||||||
|
|
#1 |
|
Membre habitué
![]() Jean-Philippe CHENUInscription : mars 2006 Messages : 197 ![]() |
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 |
|
|
00
|
|
|
#2 |
|
Membre chevronné
![]() Inscription : novembre 2004 Messages : 569 ![]() |
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. |
|
|
00
|
|
|
#3 |
|
Membre actif
![]() Consultant informatique Inscription : mars 2003 Messages : 130 ![]() |
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 ! |
|
|
00
|
|
|
#4 |
|
Membre habitué
![]() Jean-Philippe CHENUInscription : mars 2006 Messages : 197 ![]() |
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. |
|
|
00
|
|
|
#5 | |
|
Membre chevronné
![]() Inscription : novembre 2004 Messages : 569 ![]() |
Citation:
jeanphi45 Il te faut le tjavaRow après, où tu récupère cette variable (CURRENT_SHEET) |
|
|
|
00
|
|
|
#6 |
|
Membre habitué
![]() Jean-Philippe CHENUInscription : mars 2006 Messages : 197 ![]() |
Etape 1 : Qu'est-ce que je mets dans le composant tJava ?
Par défaut , il y a |
|
|
00
|
|
|
#7 |
|
Membre chevronné
![]() Inscription : novembre 2004 Messages : 569 ![]() |
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. |
|
|
00
|
|
|
#8 |
|
Membre habitué
![]() Jean-Philippe CHENUInscription : mars 2006 Messages : 197 ![]() |
é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. |
|
|
00
|
|
|
#9 |
|
Membre chevronné
![]() Inscription : novembre 2004 Messages : 569 ![]() |
Tu peux faire un test. Mets ceci dans le tJava:
Code :
System.out.println( (String)globalMap.get("tFileInputExcel_1_CURRENT_SHEET") ); 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" |
|
|
00
|
|
|
#10 |
|
Membre habitué
![]() Jean-Philippe CHENUInscription : mars 2006 Messages : 197 ![]() |
Seul le nom du 1er onglet s'affiche.
J'ai testé en cochant et en décochant "Affecte chaque feuille" : même résultat. |
|
|
00
|
|
|
#11 |
|
Membre chevronné
![]() Inscription : novembre 2004 Messages : 569 ![]() |
Tu peux joindre des captures d'écran ?
|
|
|
00
|
|
|
#12 |
|
Membre habitué
![]() Jean-Philippe CHENUInscription : mars 2006 Messages : 197 ![]() |
les voici :
|
|
|
00
|
|
|
#13 |
|
Membre chevronné
![]() Inscription : novembre 2004 Messages : 569 ![]() |
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 ?
|
|
|
00
|
|
|
#14 |
|
Membre habitué
![]() Jean-Philippe CHENUInscription : mars 2006 Messages : 197 ![]() |
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) |
|
|
00
|
|
|
#15 |
|
Membre chevronné
![]() Inscription : novembre 2004 Messages : 569 ![]() |
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). |
|
|
00
|
|
|
#16 |
|
Membre habitué
![]() Jean-Philippe CHENUInscription : mars 2006 Messages : 197 ![]() |
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 ) |
|
|
00
|
|
|
#17 |
|
Membre habitué
![]() Jean-Philippe CHENUInscription : mars 2006 Messages : 197 ![]() |
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. |
|
|
00
|
|
|
#18 |
|
Membre chevronné
![]() Inscription : novembre 2004 Messages : 569 ![]() |
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. |
|
|
00
|
|
|
#19 |
|
Membre habitué
![]() Jean-Philippe CHENUInscription : mars 2006 Messages : 197 ![]() |
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. |
|
|
00
|
|
|
#20 |
|
Membre chevronné
![]() Inscription : novembre 2004 Messages : 569 ![]() |
Effectivement, c'est vraiment bizarre
|
|
|
00
|
Copyright © 2000-2012 - www.developpez.com