IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

QlikView Discussion :

Importation fichier excel avec bouche for..each


Sujet :

QlikView

  1. #1
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Septembre 2007
    Messages
    58
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2007
    Messages : 58
    Points : 34
    Points
    34
    Par défaut Importation fichier excel avec bouche for..each
    Bonjour,

    Débutant sur Qlikview j'essaye d'importer tous les fichiers excel d'un répertoire dans une table en concaténant le tout.
    Tous les fichiers ont les 3 même colonnes.
    La bouche fonctionne bien si j'écris en dur le chemin du 1er fichier mais plus rien ne fonctionne quand je la passe en variable ou lorsque je met un caractère * pour les n° des capteurs ce qui est nécessaire pour incrémenter la table.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    // Importation et concatenation des capteurs
    Directory;
    for each File in Filelist('Data Sources\reseau capteur\SPZ_*.xlsx')
    //Capteur:
    LOAD C as [Niveau],
    Timestamp(Floor(A)+Frac(B), 'DD/MM/YYYY hh:mm:ss') as [Date],
    year(A) as [Année],
    month(A) as [Mois],
    day(A) as [Jour],
    replace(left(filename(),8), '_', ' ') as [Capteur]
    
    FROM
    //fonctionne
    //[Data Sources\reseau capteur\SPZ_4896.xlsx]
    //
    // ne fonctionne pas
    //Data Sources\reseau capteur\*.xlsx
    //
    //ne fonctionne pas
    //[$(File)]
    //
    //ne fonctionne pas
    [Data Sources\reseau capteur\SPZ_*.xlsx]
    
    (ooxml, no labels, table is [spz 4896]);
    next File
    Merci pour votre aide

  2. #2
    Membre émérite Avatar de nuke_y
    Profil pro
    Indépendant en analyse de données
    Inscrit en
    Mai 2004
    Messages
    2 076
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Indépendant en analyse de données

    Informations forums :
    Inscription : Mai 2004
    Messages : 2 076
    Points : 2 328
    Points
    2 328
    Par défaut
    Pour la boucle, il y a des tonnes d'exemples sur la Qlik Community, chacun avec ses avantages et ses inconvénients. Un au hasard https://community.qlikview.com/thread/47920

    Pour votre besoin il n'y a pas besoin de boucle, il suffit de faire:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    // Importation et concatenation des capteurs
    Directory;
     
    Capteur:
    LOAD C as [Niveau],
    Timestamp(Floor(A)+Frac(B), 'DD/MM/YYYY hh:mm:ss') as [Date],
    year(A) as [Année],
    month(A) as [Mois],
    day(A) as [Jour],
    replace(left(filename(),8), '_', ' ') as [Capteur]
    FROM
    [Data Sources\reseau capteur\SPZ_*.xlsx]
    (ooxml, no labels, table is [spz 4896]);
    Car quand Qlikview voit un nom de fichier avec un joker il va chercher tous les fichiers qui correspondent au motif, et les concatène s'ils ont les mêmes colonnes (du moment qu'il n'y a pas le mot clé "NoConcatenate" avant le load.

    Merci de donner plus de précisions si ça "ne marche pas"
    Il vaut mieux monopoliser son intelligence sur des bêtises que sa bêtise sur des choses intelligentes.

  3. #3
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Septembre 2007
    Messages
    58
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2007
    Messages : 58
    Points : 34
    Points
    34
    Par défaut
    Bonjour nuke_y

    J'ai simplifié le code comme indiqué mais ça marchait pas.
    J'avais un fichier qui avait des entêtes et pas les autres .
    Une fois corrigé, la concaténation ne se faisait pas à cause du nom des onglets qui change à chaque fichier.
    Ne sachant pas comment détecter le nom de l'onglet j'ai supprimé "table is [...]" et là Qlikview charge automatiquement le 1er onglet.
    Ca fonctionne

    question subsidiaire: peut on mettre dans une variable le nom d'un onglet en enieme position style "set nom=sheets(n).name" après from [Data Sources\reseau piezo\SPZ_*.xlsx] et l'appeler ensuite dans "table is" ?

    Merci pour votre aide.

  4. #4
    Membre émérite Avatar de nuke_y
    Profil pro
    Indépendant en analyse de données
    Inscrit en
    Mai 2004
    Messages
    2 076
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Indépendant en analyse de données

    Informations forums :
    Inscription : Mai 2004
    Messages : 2 076
    Points : 2 328
    Points
    2 328
    Par défaut
    Le nième onglet est toujours un problème en QV, moi je le fais avec un bout de code qui lit les onglets possibles en utilisant une connexion particulière au fichier, mais franchement je ne sais pas si je le ferais en production. Je crois qu'en XLSX (ou en XLS, je ne sais plus) il est possible de sélectionner l'onglet avec un index, du genre $1 mais je ne l'ai pas utilisé depuis longtemps.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    LET vFilePath = 'C:\';
     
    FOR EACH file in FileList('$(vFilePath)\*.xlsx');   // Loops each excel file in the given Folder
    //In order to get the file information from SQLtables command making use of the ODBC connection format
    ODBC CONNECT32 TO [Excel Files;DBQ=$(file)];
     
    SheetNames:
    SQLtables;  // Loads all sheet names in the Excel file.
     
    DISCONNECT;
     
    FOR index = 0 to NoOfRows('SheetNames')-1  // Loops for each sheet in the Excel file.
    LET sheetName = PurgeChar(PurgeChar(Peek('TABLE_NAME', index, 'SheetNames'), Chr(39)), Chr(36));
     
    TableName:
    Load * ,
      FileBaseName()as FIle,
      FileDir() as Dir,
      FileName() as File_Name,
      '$(sheetName)' as Sheet_name
    From $(file)(ooxml, embedded labels, table is [$(sheetName)]);
    NEXT index
    DROP TABLE SheetNames;
    NEXT
    Il vaut mieux monopoliser son intelligence sur des bêtises que sa bêtise sur des choses intelligentes.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [POI] Importer fichier Excel avec plusieurs feuilles
    Par ninoch07 dans le forum Documents
    Réponses: 9
    Dernier message: 10/02/2015, 10h59
  2. [ODS] Import Fichier Excel avec cellules fusionnées
    Par Keddy dans le forum ODS et reporting
    Réponses: 2
    Dernier message: 24/10/2014, 22h37
  3. Importer fichier excel avec PDI
    Par marc73450 dans le forum Pentaho
    Réponses: 0
    Dernier message: 27/09/2013, 16h07
  4. Import fichier excel avec un login différent
    Par HeleneaLuwina dans le forum VB.NET
    Réponses: 5
    Dernier message: 11/08/2011, 09h45
  5. [SSIS] [2K5] Import fichier excel avec SSIS
    Par alaabed dans le forum SSIS
    Réponses: 4
    Dernier message: 28/01/2010, 19h00

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo