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
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
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.
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 !
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.
Pas forcement. Il suffit de lire que la première cellule par exemple (Limit = 1, last et first column =1)Ok la version d'atb marche... mais ca revient a charger tout un fichier juste pour avoir le nom des feuilles
jeanphi45 Il te faut le tjavaRow après, où tu récupère cette variable (CURRENT_SHEET)
Etape 1 : Qu'est-ce que je mets dans le composant tJava ?
Par défaut , il y a
Code : Sélectionner tout - Visualiser dans une fenêtre à part String foo = "bar";
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.
é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.
Tu peux faire un test. Mets ceci dans le tJava:
Ce qui va imprimer à chaque itération le nom de l'onglet en cours dans la console.
Code : Sélectionner tout - Visualiser dans une fenêtre à part 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"
Seul le nom du 1er onglet s'affiche.
J'ai testé en cochant et en décochant "Affecte chaque feuille" : même résultat.
les voici :
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 ?
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)
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).
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 )
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.
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.
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.
Vous avez un bloqueur de publicités installé.
Le Club Developpez.com n'affiche que des publicités IT, discrètes et non intrusives.
Afin que nous puissions continuer à vous fournir gratuitement du contenu de qualité, merci de nous soutenir en désactivant votre bloqueur de publicités sur Developpez.com.
Partager