Accueil du site > Les articles > Macro Adelia pour Export XLS
Version à imprimer Enregistrer au format PDF

Macro Adelia pour Export XLS

lundi 3 janvier 2011, par Serge Gomes Visites  3214

Présentation Ce document présente les techniques de codage à mettre en œuvre pour exporter :

- Un fichier AS400 vers un fichier xls.
- Le résultat d’une requête SQL vers un fichier xls.
- Exporter directement des informations vers un fichier de l’IFS.

Pour faciliter le codage des macro-instructions ADELIA ont été crées.

Liste des macro-instructions
- &EXPXLS_INI : Cette macro doit être invoqué au début du code source. Elle ne reçoit aucun paramètre. Cette macro n’apparait qu’une seule fois dans le code source.
- &EXPXLS_ADD : Cette macro permet d’ajouter des entêtes de colonnes. A utiliser uniquement si vous souhaitez des entêtes de colonnes dans le fichier xls généré. Il faut que le nombre de colonne correspondent au colonne soit du fichier soit du résultat généré par la requête sql.
- &SQLXLS : A utiliser quand on souhaite exporter une requête sql vers Excel.
- &FICXLS : A utiliser quand on souhaite exporter le contenu d’un fichier vers Excel
- &INIXLS : Cette macro est utilisée par les 2 macros SQLXLS et FICXLS (pour gérer les parties commune). Elle ne doit pas être invoquer dans le code source.
- &CPYTOIMPF : Cette macro est utilisée par les 2 macros SQLXLS et FICXLS. Cette macro est utilisée par d’autres processus.

Règle de codage :
- La macro &EXPXLS_INI est obligatoire si on souhaite utiliser SQLXLS ou FICXLS.
- La macro &EXPXLS_INI doit être invoquée en début de source. Dans tous les cas avant l’invocation de SQLXLS_ADD et SQLXLS ou FICXLS.
- La macro SQLXLS_ADD doit être utilisée (non obligatoire) si on souhaite des entêtes de colonnes dans le document Excel généré. Elle doit être invoquée dans le source (une seule fois) , avant l’invocation de SQLXLS et/ou FICXLS.
- La macro INIXLS ne doit jamais être invoquée à partir d’un source ADELIA. Elle est réservée à l’usage interne des macros SQLXLS et FICXLS.

Description EXPXLS_ADD :

Cette macro doit être invoquée autant de fois qu’il y a de colonnes (avec le même N° de ligne). Cette macro reçoit deux paramètres :
- Le 1er paramètre qui correspond à un entête de colonne. Ce paramètre est de type alphanumérique, il peut s’agir d’un littéral ou d’une variable.
- Le 2ème paramètre correspond au N° de ligne, pour le cas où vous souhaitez plusieurs lignes d’entête. Attention d’affecter de ce N° de façon incrémentale en commençant par « 1 ».

Description SQLXLS :

Attention si la requête contient des colonnes issues d’un calcul ou d’une conversion (DIGITS, SUM…), il faut nommer la colonne et attribuer le CCSID 297 (Exemple d’utilisation dans le TAB053). Cette macro reçoit trois paramètres :
- Le 1er paramètre correspond au répertoire PC (qui doit être obligatoirement dans l’IFS de l’AS400). Ce paramètre est de type alphanumérique, il peut s’agir d’un littéral ou d’une variable (ex : ‘\home\xls\’). Si ce répertoire n’existe pas, il sera créé.
- Le 2ème paramètre est le nom fichier pc qui va être généré. Ce paramètre est de type alphanumérique, il peut s’agir d’un littéral ou d’une variable (ex : ‘rapport2008.xls’). Vous devez renseigner l’extension du fichier (.xls).
- Le 3ème paramètre est une requête SQL. Cette requête doit être de type « SELECT », il peut s’agir d’une variable ou d’un littéral. La longueur de la requête est de 5000 caractères maximum.

Description FICXLS : Cette macro reçoit quatre paramètres :
- Le 1er paramètre correspond au répertoire PC (qui doit être obligatoirement dans l’IFS de l’AS400). Ce paramètre est de type alphanumérique, il peut s’agir d’un littéral ou d’une variable (ex : ‘\home\xls\’). Si ce répertoire n’existe pas, il sera créé.
- Le 2ème paramètre est le nom fichier pc qui va être généré. Ce paramètre est de type alphanumérique, il peut s’agir d’un littéral ou d’une variable (ex : ‘rapport2008.xls’). Vous devez renseigner l’extension du fichier (.xls).
- Le 3ème paramètre est le nom de la bibliothèque AS400. Ce paramètre est de type alphanumérique, il peut s’agir d’un littéral ou d’une variable (ex : ‘QTEMP’). Vous pouvez laisser ce paramètre à blanc, si vous voulez utiliser le fichier « en ligne ».
- Le 4ème paramètre est le nom du fichier AS400. Ce paramètre est de type alphanumérique, il peut s’agir d’un littéral ou d’une variable (ex : ‘NATART’). Si ce paramètre est à blanc alors vous n’imprimerez que l’entête.

Exemples d’utilisations :
- Export information vers fichier non structuré

Cette exemple montre comment créé un fichier de 3 lignes sans copier de fichier et sans requête SQL.

&EXPXLS_INI
&EXPXLS_ADD(‘Code article’ ;1)
&EXPXLS_ADD(W_COD_ART;1)
&EXPXLS_ADD(‘Libellé article’ ;2)
&EXPXLS_ADD(W_LIB_ART;2)
&EXPXLS_ADD(‘Qté’ ;3)
&EXPXLS_ADD(‘12225’;3)
W_REP = '/home/exp/article/'
W_FIC = 'tst3lig.txt'
W_FICAS = *BLANK
W_BIB_AS = *BLANK
&FICXLS(W_REP;W_FIC;W_BIB_AS;W_FIC_AS)

- Export requête SQL vers IFS avec entête

&EXPXLS_INI
&EXPXLS_ADD("Code article" ;1)
&EXPXLS_ADD("Libellé article";1)
W_REP = '/home/exp/article/'
W_FIC = 'SGS20080808A.xls'
W_RQT = 'SELECT CARTIC, LARTIC FROM FICART WHERE LARTIC like "A%'''
&SQLXLS(W_REP;W_FIC;W_RQT)

- Export requête SQL vers IFS sans entête

&EXPXLS_INI
W_REP = '/home/exp/article/'
W_FIC = 'TXT20080808B.xls'
W_RQT = 'SELECT CARTIC, LARTIC FROM FICART WHERE LARTIC like "A%'''
&SQLXLS(W_REP;W_FIC;W_RQT)

- Exemple requête SQL en forçant le CCSID :

W_REQ = 'SELECT TYRQIQ, CREQIQ, LREQIQ,'
W_REQ = W_REQ /// ' LCOUIQ, TLOTIQ,'
W_REQ = W_REQ /// ' CAST( DIGITS(JCREIQ)'
W_REQ = W_REQ /// ' CONCAT ''/'' CONCAT DIGITS(MCREIQ)'
W_REQ = W_REQ /// ' CONCAT ''/'' CONCAT'
W_REQ = W_REQ /// ' DIGITS(ACREIQ) AS CHAR(10) CCSID 297)'
W_REQ = W_REQ /// ' AS DATCRT ,UTITIQ ,'
W_REQ = W_REQ /// ' CAST( DIGITS(JMODIQ)'
W_REQ = W_REQ /// ' CONCAT ''/'' CONCAT DIGITS(MMODIQ)'
W_REQ = W_REQ /// ' CONCAT ''/'' CONCAT'
W_REQ = W_REQ /// ' DIGITS(AMODIQ) AS CHAR(10) CCSID 297)'
W_REQ = W_REQ /// ' AS DATMOD , UTIMIQ ,'
W_REQ = W_REQ /// ' CMAJIQ FROM TARFIC'

- Export fichier vers IFS avec entête d’une ligne

&EXPXLS_INI
&EXPXLS_ADD("Code article" ;1)
&EXPXLS_ADD("Libellé article";1)
W_REP = '/home/exp/article/'
W_FIC = 'TXT20080808C.xls'
&FICXLS(W_REP;W_FIC;'QTEMP';'FICART')

- Export fichier vers IFS avec entête de 2 lignes

&EXPXLS_INI
&EXPXLS_ADD("LISTE DES CODES ARTICLES" ;1)
&EXPXLS_ADD("Code article" ;2)
&EXPXLS_ADD("Libellé article";2)
W_REP = '/home/exp/article/'
W_FIC = 'TXT20080808C.xls'
&FICXLS(W_REP;W_FIC;'QTEMP';'FICART')

- Export fichier vers IFS sans entête

&EXPXLS_INI
W_REP = '/home/exp/article/'
W_FIC = 'TXT20080808D.xls'
&FICXLS(W_REP;W_FIC;'QTEMP';'FICART')

- Export successifs dans un même source :

Pour enchainer plusieurs exports dans le même programme, il faut vider la liste des entêtes avant chaque export.

&EXPXLS_INI
&EXPXLS_ADD("Code article";1)
&EXPXLS_ADD("Libellé article";1)
W_REP = '/home/exp/article/'
W_FIC = 'TXT20080808E.xls'
&FICXLS(W_REP;W_FIC;'QTEMP';'FICART')

VIDER_LST LST_HXLS

&EXPXLS_INI
&EXPXLS_ADD("Code article";1)
&EXPXLS_ADD("PRS";1)
W_REP = '/home/exp/tarif/'
W_FIC = 'TXT20080808F.xls'
&FICXLS(W_REP;W_FIC;'QTEMP';'FICART

Documents joints