Utiliser une boucle While pour extraire des feuilles Excel en série avec SAP Data Integrator
Vous apprendrez dans ce tutoriel à utiliser une boucle while sous SAP Data Integrator. Ce while sera utilisée pour réaliser un traitement nécessaire lorsque vous avez besoin d’extraire en série les données de toutes les feuilles d’un document Excel, dans le cas ou ces données sont structurées de la même manière dans toutes les feuilles.
Prérequis :
- Version : SAP Data Integrator 4.2 SP10.
- Avoir installé un référentiel local.
- Savoir développer, valider et exécuter un Job simple d’extraction et de chargement de tables.
- Avoir étudié le tutoriel suivant sur l’extraction depuis Excel.
Contexte :
Vous disposez dans le répertoire « E:Fichiers DSSources Excel » d’un document Excel contenant plusieurs feuilles de nom quelconque avec des données toutes structurées de la même manière :

L’objectif est d’extraire l’ensemble de ces données pour les charger dans une table cible PRODUCTS_DEPUIS_XLSX.
Résolution :
Créez un nouveau Job nommé JOB_WHILE_EXCEL muni d’un Workflow. Ouvrez le Workflow et insérez y une boucle While nommée WHILE_EXTRACT_EXCEL :

Chargez le JOB_WHILE_EXCEL dans l’espace de travail, puis ouvrez ses variables et créez trois variables globales telles qu’indiqué ci – dessous :

- La variable $NB_FEUILLES de type int prend la valeur par défaut 1. Elle représente le nombre de feuilles présentes dans le fichier Excel.
- La variable $NUM_FEUILLE_INT de type int prend la valeur initiale 0. Elle représente le numéro de la feuille Excel en partant de la gauche du fichier.
- La variable $NUM_FEUILLE_VARCHAR de type varchar servira à paramétrer l’extraction Excel en fonction de la prochaine feuille à traiter.
Ouvrez le composant WHILE, puis ouvrez son éditeur (1) pour écrire la condition de continuation de la boucle. Allez chercher dans l’onglet des variables les deux variables globales entières crées precedemment. Vous indiquez que le contenu de la boucle WHILE sera exécutée tant que $NUM_FEUILLE_INT < $NB_FEUILLES (2), c’est à dire tant que la feuille traitée ne sera pas la dernière feuille de la source Excel :

L’inégalité est stricte car le numéro de feuille extraite sera incrémenté après l’entrée dans le contenu du WHILE, comme nous allons le voir plus tard.
Insérez dans la boucle WHILE un Dataflow DF_EXTRACT_XLSX et un script SC_INCREMENT puis reliez les :

Ouvrez le script puis ouvrez son éditeur. Ecrivez une première ligne permettant l’incrément du numéro de feuille à chaque entrée dans le WHILE (1). Puis écrivez $NUM_FEUILLE_VARCHAR comme une conversion du numéro de feuille en chaîne de caractère. Utilisez pour celà la fonction de conversion to_char sans paramètres (2). Utilisez la fonction print pour affichez le numéro de la feuille en cours de traitement (3). Enfin, validez la syntaxe du script (4) :

Le numéro de feuille doit être converti en varchar car le format d’extraction Excel ne peut utiliser que des caractères, même pour écrire des chiffres.
Ouvrez le Dataflow DF_EXTRACT_XLSX. Nous allons réutiliser un format Excel existant décrivant une structure de données équivalente à celle de notre source Excel. Il s’agit du format Excel ci dessous, utilisé dans ce tutoriel :

Placez en source du Dataflow une instance du format Excel ci – dessus. Ajoutez un Transformateur Query et la table cible CIBLE_PRODUCT et reliez tous les composants :

Ouvrez le composant de la source Excel. Changez le nom de répertoire et le nom de fichier pour faire pointer le composant vers le fichier source produits.xlsx (1). Indiquez que les feuilles Excel doivent être extraites par numéro puis indiquez en numéro de feuille le numéro de feuille dynamique $NUM_FEUILLE_VARCHAR (2), incrémenté lors de chaque passage dans le WHILE :

Ouvrez le Query pour y réalisez un mapping simple depuis son schéma d’entrée vers son schéma de sortie :

Validez vos traitements puis lancez l’exécution du Job. Dans la fenêtre des propriétés du Job allez dans l’onglet « Variable globale » et indiquez en valeur de $NB_FEUILLES le nombre de feuilles à extraire depuis le fichier Excel (3 feuille dans cet exemple) puis cliquez sur OK pour démarrer l’exécution :

Vous pouvez vérifier dans le suivi d’exécution que le contenu de la boucle WHILE est exécutée autant de fois que la valeur de la variable
$NB_FEUILLES :

Une fois l’exécution terminée ouvrez un aperçu du contenu de la table cible pour vérifier que les données contenues dans l’ensemble des feuilles Excel source y sont toutes présentes :

Remarque : Dans cet exemple vous devez, lors du lancement de l’exécution du Job d’extraction, indiquer le nombre de pages à extraire. Il est aussi possible d’ajouter dans le fichier Excel une page supplémentaire affichant le nombre de pages à extraire grâce à un code VBA. Ce nombre pourra être extrait par SAP data Integrator pour adapter le nombre d’exécutions du contenu du WHILE sans intervention de l’utilisateur.
Vous savez désormais comment utiliser une boucle WHILE pour extraire des feuilles Excel en série sous SAP Data Integrator.
Laisser un commentaire
Il n'y a pas de commentaires pour le moment. Soyez le premier à participer !