Intégrer des données d’un fichier Excel™ depuis l’objet Excel-input

Dans Workbench / Spectre 7.2, il est possible d’intégrer des données d'objectifs (budgets, benchmarks, ...) maintenus dans des onglets Excel™. Cela s’effectue via l'objet Excel-input dans un script Spectre .build.

Supposons que l'on souhaite récupérer les données du fichier Excel ci-dessous :

Les données peuvent être intégrées dans un script. build et grâce à un objet Excel-input comme ci-dessous :

Voici le code du script associé à notre fichier Excel :

build {
  //FlowNodeAttributes="""
  //EditorComments="Lit un fichier Excel comme celui-ci :
  //
  //"**
  //"""
  excel-input "/data/objectifs vendeurs.xlsx" name="excel-input_1"
  output "/cbases/sortie-excel.cbase" name="output_2"
  layout-data {
    node name="excel-input_1" position="8 8"
    node name="concat" position="88 8"
    node name="output_2" position="168 8"
  }
}

L’exécution du script génère le cbase sortie-excel.cbase avec le contenu suivant :

Supposons maintenant que nous ayons un fichier Excel contenant des lignes vides :

Lors de l'exécution du script générant le fichier de sortie cbase, les logs indiquent que des lignes vides ont été trouvées et que ces dernières ont été tout simplement ignorées :

Starting run: spectre build /programs/entree excel.build 
Working directory: /programs
Command Line: D:\DI_v72\Solution\diveline\bin\spectre.exe build "/programs/entree excel.build" --project "Excel spectre"
00:00:00.000: WARNING: <generated>:39: Tag 'proreporter' is deprecated
00:00:00.000: WARNING: <generated>:42: Tag 'reporter-portlet' is deprecated
spectre build 7.2 (14)
Licensed to: Bimaxis

00:00:00.039: Mon Jun 10 15:11:25 2024
00:00:00.041: Temp folder: project://Excel spectre/temp
00:00:00.046: Using first worksheet "Feuil1"
00:00:00.047: D:\DI_v72\DI_Projects\Excel spectre\data\objectifs vendeurs lignes vides.xlsx:2: Skipped blank row
00:00:00.047: D:\DI_v72\DI_Projects\Excel spectre\data\objectifs vendeurs lignes vides.xlsx:3: Skipped blank row
00:00:00.049: Column "Vendeur" is unique for every row
00:00:00.051: 97 rows, 2 columns
00:00:00.051: Sorting strings...
00:00:00.051: Writing D:\DI_v72\DI_Projects\Excel spectre\cbases\sortie-excel.cbase...
Finished in 0,079 seconds with 0 warnings and 0 errors
00:00:00.079: This build used 7MB of memory.
00:00:00.079: Total cBase size: 2KB
System Process returned 0

Supposons maintenant que nous ayons un fichier Excel dont les données utiles commencent à une ligne précise :

Dans notre cas les données utiles débutent à la ligne 5, ligne où se trouvent les en-têtes.

Le script permettant de lire les données de l'onglet Excel à partir de la ligne 5 est le suivant :

build {
  //FlowNodeAttributes="""
  //EditorComments="Lit un fichier Excel comme celui-ci :
  //
  //"**
  //"""
  excel-input "/data/objectifs vendeurs horodatage.xlsx" start-row=5 name="excel-input_1"
  output "/cbases/sortie-excel.cbase" name="output_2"
  layout-data {
    node name="excel-input_1" position="8 8"
    node name="concat" position="88 8"
    node name="output_2" position="168 8"
  }
}

Si dans Workbench, on bascule sur l'éditeur de flux du script, afin d'avoir une interface graphique, en cliquant sur l'objet Excel-input on retrouve la propriété dans la zone encadrée :

Supposons maintenant que l'on ait le fichier Excel ci-dessous et que l'on souhaite récupérer les données uniquement pour la Zone Nord :

Le script permettant de lire les données uniquement pour cette zone est le suivant :

build {
  //FlowNodeAttributes="""
  //EditorComments="Lit un fichier Excel comme celui-ci :
  //
  //"**
  //"""
  excel-input "/data/objectifs vendeurs zones.xlsx" name="excel-input_1"{
    filter `value("Zone")="Nord"`
  }
  output "/cbases/sortie-excel.cbase" name="output_2"
  layout-data {
    node name="excel-input_1" position="8 8"
    node name="concat" position="88 8"
    node name="output_2" position="168 8"
  }
}

L’exécution du script génère le cbase sortie-excel.cbase avec le contenu suivant :

Les données ont bien été filtrées sur la zone souhaitée.

Si dans Workbench, on bascule sur l'éditeur de flux du script, afin d'avoir une interface graphique, on s’aperçoit qu'un objet filter est présent avec les propriétés suivantes :

Supposons que l'on souhaite récupérer les données uniquement dans la zone sélectionnée du fichier Excel ci-dessous :

Le script permettant de lire les données uniquement pour cette zone est le suivant :

build {
  //FlowNodeAttributes="""
  //EditorComments="Lit un fichier Excel comme celui-ci :
  //
  //"**
  //"""
  excel-input "/data/objectifs vendeurs zones.xlsx" range="A1:C10" name="excel-input_1" 
  output "/cbases/sortie-excel.cbase" name="output_2"
  layout-data {
    node name="excel-input_1" position="8 8"
    node name="concat" position="158 8"
    node name="output_2" position="238 8"
  }
}

Et avec le résultat suivant dans le cbase une fois le script exécuté :

Supposons que l'on ait un fichier Excel contenant plusieurs feuilles / onglets :

et que nous souhaitons récupérer les données d'un onglet spécifique, par exemple Objectifs vendeurs.

Le script permettant de lire les données de l'onglet souhaité est le suivant :

build {
  //FlowNodeAttributes="""
  //EditorComments="Lit un fichier Excel comme celui-ci :
  //
  //"**
  //"""
  excel-input "/data/objectifs multi feuilles.xlsx" sheet="Objectifs vendeurs" name="excel-input_1"
  output "/cbases/sortie-excel.cbase" name="output_2"
  layout-data {
    node name="excel-input_1" position="8 8"
    node name="concat" position="88 8"
    node name="output_2" position="168 8"
  }
}

Si dans Workbench, on bascule sur l'éditeur de flux du script, afin d'avoir une interface graphique, en cliquant sur l'objet Excel-input on retrouve la propriété dans la zone encadrée :

Supposons que l'on ait maintenant le fichier Excel suivant :

On s'aperçoit que les valeurs de Zone ne sont pas systématiquement répétées sur chaque ligne.

Le script permettant répéter les valeurs manquantes est le suivant :

build {
  //FlowNodeAttributes="""
  //EditorComments="Lit un fichier Excel comme celui-ci :
  //
  //"**
  //"""
  excel-input "/data/objectifs zones trimestres.xlsx" name="excel-input_1"{
    column "Zone" repeat-if-blank=true
    include-other-columns
    }
  output "/cbases/sortie-excel.cbase" name="output_2"
  layout-data {
    node name="excel-input_1" position="8 8"
    node name="concat" position="88 8"
    node name="output_2" position="168 8"
  }
}

Ci-dessous le résultat dans le cbase une fois le script exécuté :