Skip to main content
Announcements
Have questions about Qlik Connect? Join us live on April 10th, at 11 AM ET: SIGN UP NOW
cancel
Showing results for 
Search instead for 
Did you mean: 
brunobertels
Master
Master

aide script pour import de plusieurs onglet excell concernant des périodes hebdomadaires

Bonjour à tous

J'aimerais savoir si il est possible de faire un script de chargement dans Qlik Sense dont l'objectif serait de :

Charger des onglets d'un fichier excel dont les champs sont identiques par onglet et ou chaque onglet concerne une semaine.

Les onglet sont nommés ainsi S25 S26 etc.

Ainsi j'imagine qu'il faudrait détecter le nom de l'onglet et ajouter un champs date [Sem] en fonction du numéro de semaine de l'onglet puis concatener les onglets.

Merci de votre aide

Bruno

1 Solution

Accepted Solutions
Not applicable

Bonjour Bruno,

Avec mon Windows 7 - 64bits j'ai du lancer ce gestionnaire ODBC :

c:\windows\sysWOW64\odbcad32.exe

Il faut y accéder depuis l'explorateur de dossiers car ce n'est pas la même que celui du menu démarrer.

Là, les pilotes Excel devraient bien apparaître lors de l'ajout d'une nouvelle connexion.

J'espère que je n'oublie rien car mon cerveau est encore un peu en vacances.

Xavier.

View solution in original post

10 Replies
Not applicable

Bonjour Bruno,

Voici un bout de script que j'ai trouvé sur les forum anglophone et qui pourra t'aider. C'est du QlikView adapté en QlikSense.

Il y a 2 pré-requis :

- créer une connection ODBC vers ton fichier Excel (j'ai eu quelques difficultés avec mon Win7-64bits, hésites pas à redemander si besoin). NB : login et password restent vides.

- créer un connection Dossier où se trouve ce même fichier Excel

Ce script va charger tous les onglets du classeur via une boucle for-next. Je te laisse consulter l'aide de la fonction SQLTables qui est la clé du sujet.

Dans mon exemple le fichier nomme zzz.xlsx.

LIB CONNECT TO 'Excel Files zzz';

tables:

SQLTables;

DISCONNECT;

let var=NoOfRows('tables');

FOR i = 0 to $(var)-1

  let sheetName=subfield(peek('TABLE_NAME', i,'tables'),'$',1);

  $(sheetName):

  LOAD *

  FROM [lib://Desktop/zzz.xlsx](ooxml, embedded labels, table is '$(sheetName)');

NEXT i

DROP Table tables;

Je pense que tu peux manipuler sheetName pour vérifier que c'est un onglet semaine et remplacer $(sheetName): par le nom de la table que tu veux créer. Si les champs sont identiques le CONCATENATE sera implicite et ça devrait fonctionner comme ça.


Cordialement,

Xavier.

brunobertels
Master
Master
Author

Bonjour Xavier

Merci beaucoup pour ta réponse je vais tester ça de retour de vacances et je posterai le résultat.

Encore une petite question ensuite qu'elle méthode employer pour rajouter un champ semaine à chaque onglet afin de rajouter une dimension temporelle à partir du nom de l'onglet ?

Bruno

Not applicable

Bonjour Bruno,

Voici un script qui devrait correspondre à ton besoin :

LIB CONNECT TO 'Excel Files zzz';

  XlsInfo:

  SQLTables;

  DISCONNECT;

  let var=NoOfRows('XlsInfo');

  // Pour chaque feuille du classeur

  FOR i = 0 to $(var)-1

  // sheetName = nom de la feuille

    let sheetName=subfield(peek('TABLE_NAME', i,'XlsInfo'),'$',1);

  

    // weekNb = numéro de la semaine

    let weekNb=floor(replace(Upper(sheetName),'S',''));

  

    // si la feuille commence par S suivi d'un nombre compris entre 1 et 53

    IF upper(left(sheetName,1))='S' and weekNb>=1 and weekNb<=53 then


      // alors on charge toute la table et on rajoute une colonne semaine avec notre variable issue du nom de la feuille en valeur

      MyTable:

      LOAD *, $(weekNb) as Semaine

      FROM [lib://Desktop/zzz.xlsx](ooxml, embedded labels, table is '$(sheetName)');

    END IF

NEXT i

  

DROP Table XlsInfo;

flochi75
Creator III
Creator III

bonjour à tous,

tout cela me semble bien compliqué... S'agissant d'un fichier excel, n'est il pas plus simple de rajouter une colonne "No_SEMAINE" dans chaque onglet ?

brunobertels
Master
Master
Author

Bonjour Florent,

Je ne peux pas faire autrement le fichier Excel est généré automatiquement puis importé dans qliksense. ce pourquoi je recherche une solution d'automatisation via le script de chargement.

Bruno

brunobertels
Master
Master
Author

Bonjour

Je veux bien un coup de main sur la connexion odbc j'ai cherché un peu partout si je comprends le principe je n'y arrive pas.

1 Je sauvegarde mon fichier Excel normalement

2 je crée une connexion odbc en utilisant le gestionnaire de connexion odbc

3 je choisis le driver odbc adéquat dans la liste ? ( ou trouver le driver pour odbc pour Excel)

4 Je sauvegarde le chemin de ma connexion

5 j'importe dans qlik sense

Est ce bien ça ?

Bruno

flochi75
Creator III
Creator III

Je ne comprends pas trop le lien ficher excel et connexion ODBC :

Si vous voulez importer un fichier .xls dans qliksense, pas besoin de

connexion ODBC, il suffit de passer par :

1. Gestionnaire de données

2. Cliquez sur "ajouter des données

3.

Après, le chemin diffère selon si vous avez un serveur ou pas…

Cordialement,

Florent LELARGE-OTINIANO

IDE - TIM

Département d'Information Médicale

02.54.88.33.00 poste 1922

Avis de confidentialité: Ce message e-mail, y compris les pièces jointes,

est à l'usage exclusif des destinataires et peut contenir des informations

confidentielles et / ou privilégiées. Toute lecture non autorisée,

utilisation, communication ou distribution est interdite. Si vous n'êtes pas

le destinataire prévu, merci de prévenir l'expéditeur par réponse e-mail, de

supprimer ce message et détruire toutes les copies de ceux-ci ainsi que les

pièces jointes.

Not applicable

Bonjour Florent,

En fait la connexion ODBC ou OLEDB est nécessaire pour utiliser la fonction SQLTables. Mais ici les données sont dans un fichier Excel... D'où ces complications.

Cordialement,

Xavier.

Not applicable

Bonjour Bruno,

Avec mon Windows 7 - 64bits j'ai du lancer ce gestionnaire ODBC :

c:\windows\sysWOW64\odbcad32.exe

Il faut y accéder depuis l'explorateur de dossiers car ce n'est pas la même que celui du menu démarrer.

Là, les pilotes Excel devraient bien apparaître lors de l'ajout d'une nouvelle connexion.

J'espère que je n'oublie rien car mon cerveau est encore un peu en vacances.

Xavier.