* --------------------------------------------------------------- * * EXPXLS_INI * Macro initiale pour utilisation des macros EXPXLS_ADD - SQLXLS * * ou FICXLS * * Ex=>&EXPXLS_INI A PLACER ENTÊTE DU SOURCE * * --------------------------------------------------------------- * DECL LISTE LST_HXLS MI_TITLE MI_NOLIG DECLARER MITITR;MI_TITLE 999 DECLARER MINOLI;MI_NOLIG 5;0 DECLARER MIRPAD;MI_RPAD 1 DECLARER MIWMER;MI_WSEP 1 DECLARER MIW999;MI_WA999 999 DECLARER MIWRQR;MI_WRQT 5000 DECLARER MIBIBA;MI_BIB_AS 10 DECLARER MIBICA;MI_FIC_AS 10 DECLARER MIBIBP;MI_BIB_PC 255 DECLARER MIBICP;MI_FIC_PC 255 VIDER_LST LST_HXLS * --------------------------------------------------------------- * * EXPXLS_ADD * * 2 paramètre 1=>Libellé 2=>N°ligne * * Cette macro doit être utilisé après EXPXLS_INI et avant SQLXLS * * Elle alimente une liste mémoire qui contient les libellés des * * entêtes de colonnes du fichier Excel généré(&SQLXLS ou &FICXLS) * * Il faut appeler la macro autant de fois qu'il y a de colonne * * Si cette macro n'est pas appelée avant SQLXLS ou FICXLS * * pas d'entête de colonnes sur le fichier Excel généré * * Ex=>&EXPXLS_ADD('Code Article';1) * * Ex=>&EXPXLS_ADD('Libellé Article';1) * * --------------------------------------------------------------- * * LISTE LST_HXLS MI_TITLE MI_TITLE = *BLANK MI_TITLE = :01 MI_NOLIG = :02 SI MI_NOLIG = 0 MI_NOLIG = 1 FIN INSERER_ELT LST_HXLS * --------------------------------------------------------------- * * --------------------------------------------------------------- * * SQLXLS * * Il faut invoquer la macro EXPXLS_INI pour utiliser cette macro * * Cette macro peut être utilisée après SQLXLS_ADD * * 1 => REPERTOIRE PC * * 2 => FICHIER PC * * 3 => Requête SQL * * Ex=>&SQLXLS(W_REP;W_FIC:W_RQT) * * --------------------------------------------------------------- * MI_BIB_PC = *BLANK MI_BIB_PC = :01 MI_FIC_PC = *BLANK MI_FIC_PC = :02 MI_BIB_AS = *BLANK MI_BIB_AS = 'QTEMP' MI_FIC_AS = *BLANK MI_FIC_AS = 'SQLXLS' &INIXLS * Suppression préventive MI_WRQT = *BLANK MI_WRQT = 'DROP TABLE ' // MI_BIB_AS MI_WRQT = MI_WRQT /// '/' /// MI_FIC_AS DEBUT_SQL + EXECUTE IMMEDIATE :MI_WRQT FIN_SQL * Création du fichier temporaire sur l'AS400 MI_WRQT = *BLANK MI_WRQT = 'CREATE TABLE ' // MI_BIB_AS MI_WRQT = MI_WRQT /// '/' /// MI_FIC_AS MI_WRQT = MI_WRQT /// ' AS( ' // :03 MI_WRQT = MI_WRQT /// ' ) WITH DATA' DEBUT_SQL + EXECUTE IMMEDIATE :MI_WRQT FIN_SQL * Copy vers l'IFS du détail &CPYTOIMPF(MI_BIB_AS;MI_FIC_AS;MI_BIB_PC;MI_FIC_PC;MI_RPAD) SI *IN90 = '1' * Erreur FIN * --------------------------------------------------------------- * * --------------------------------------------------------------- * * FICXLS * Il faut invoquer la macro EXPXLS_INI pour utiliser cette macro * * Cette macro peut être utilisée après EXPXLS_ADD * * 1 => REPERTOIRE PC * * 2 => FICHIER PC (si *blank pas de détail) * * 3 => Bibliothèque AS 400 * * 4 => Fichier AS 400 * * Ex=>&FICXLS(W_REP;W_FIC;'QTEMP';'TOTO') * * --------------------------------------------------------------- * MI_BIB_PC = *BLANK MI_BIB_PC = :01 MI_FIC_PC = *BLANK MI_FIC_PC = :02 MI_BIB_AS = *BLANK MI_BIB_AS = :03 MI_FIC_AS = *BLANK MI_FIC_AS = :04 &INIXLS * Copy vers l'IFS du détail SI MI_FIC_AS <> *BLANK &CPYTOIMPF(MI_BIB_AS;MI_FIC_AS;MI_BIB_PC;MI_FIC_PC;MI_RPAD) SI *IN90 = '1' * Erreur FIN FIN * --------------------------------------------------------------- * * --------------------------------------------------------------- * * INIXLS * * MACRO à USAGE INTERNE POUR GERER LA PARTIE COMMUNE DES 2 MACROS* * SQLXLS et FICXLS * * --------------------------------------------------------------- * DECLARER MIMELI;MI_MEM_NOLIG 5;0 * Replace MI_RPAD = 'R' MI_WREP = *BLANK MI_WK = '''' MI_WCMD = *BLANK MI_MEM_NOLIG = 0 * Suppression préventive DEBUT_SQL + DROP TABLE QTEMP/XL_HEAD FIN_SQL MI_WCMD = *BLANK MI_WCMD = 'CRTPF FILE(QTEMP/XL_HEAD) RCDLEN(999)' EXECUTER_CMD MI_WCMD SI *IN90 = '1' * Erreur SINON * Lecture de l'entête MI_WA999 = *BLANK MI_WSEP = *BLANK LIRE_P_ELT LST_HXLS TANT_QUE &CODE_LST(LST_HXLS) = *NORMAL SI MI_MEM_NOLIG = 0 MI_MEM_NOLIG = MI_NOLIG FIN SI MI_MEM_NOLIG <> MI_NOLIG * Il faut insérer une ligne et remettre à blanc MI_WSEP MI_MEM_NOLIG = MI_NOLIG DEBUT_SQL + INSERT INTO QTEMP/XL_HEAD VALUES( :MI_WA999 ) FIN_SQL MI_WSEP = *BLANK MI_WA999 = *BLANK FIN MI_WA999 = MI_WA999 /// MI_WSEP /// MI_TITLE * Au 1er passage dans la boucle MI_WSEP est à blanc... MI_WSEP = &CONVERSION_CAR('05') LIRE_AV_ELT LST_HXLS REFAIRE SI MI_NOLIG > 0 DEBUT_SQL + INSERT INTO QTEMP/XL_HEAD VALUES( :MI_WA999 ) FIN_SQL FIN * Vérif que le rep pc finit par "\" MI_WLNG = &LONGUEUR_CHAINE(MI_BIB_PC) SI MI_WLNG <> 0 MI_WCAR = &EXTRACTION(MI_BIB_PC;MI_WLNG;1) SI MI_WCAR = '/' MI_WLNG = MI_WLNG - 1 MI_WREP = &EXTRACTION(MI_BIB_PC;1;MI_WLNG) MI_WLNG = MI_WLNG + 1 SINON MI_WREP = MI_BIB_PC MI_BIB_PC = MI_BIB_PC /// '/' FIN FIN SI MI_WMREP <> MI_WREP ET MI_WA999 <> *BLANK * Si le répertoire à changé depuis le dernier appel MI_WMREP = *BLANK MI_WMREP = MI_WREP MI_WCMD = *BLANK MI_WCMD = 'MKDIR DIR(' /// MI_WK /// MI_WREP /// MI_WK /// ')' EXECUTER_CMD MI_WCMD SI *IN90 = '1' * Le répertoire existe déjà... FIN FIN *Ecriture de l'entête SI MI_WA999 <> *BLANK * ADD... MI_RPAD = 'A' MI_WCMD = *BLANK MI_WCMD = *BLANK MI_WCMD = 'CPYTOSTMF FROMMBR(''/QSYS.LIB/QTEMP.LIB/' MI_WCMD = MI_WCMD /// 'XL_HEAD.FILE/XL_HEAD.MBR'') ' MI_WCMD = MI_WCMD /// ' TOSTMF(' MI_WCMD = MI_WCMD /// MI_WK /// MI_BIB_PC MI_WCMD = MI_WCMD /// MI_FIC_PC /// MI_WK /// ')' MI_WCMD = MI_WCMD /// ' STMFOPT(*REPLACE) STMFCODPAG(*PCASCII)' EXECUTER_CMD MI_WCMD SI *IN90 = '1' * Erreur FIN FIN FIN * --------------------------------------------------------------- * * --------------------------------------------------------------- * * CPYTOIMPF * MACRO à USAGE INTERNE * Paramètres=> * 1 => BIB AS400 (BLANC ACCEPTE) * 2 => FIC AS400 * 3 => REPERTOIRE PC * 4 => FICHIER PC * 5 => 'A' pour Ajout sinon Replace * --------------------------------------------------------------- * DECLARER MIWK;MI_WK 1 DECLARER MIWCMD;MI_WCMD 255 DECLARER MI1IBA;MI_BI1_AS 10 DECLARER MI1ICA;MI_FI1_AS 10 DECLARER MI1IBP;MI_BI1_PC 255 DECLARER MI1ICP;MI_FI1_PC 255 DECLARER MIWCAR;MI_WCAR 1 DECLARER MIWLNG;MI_WLNG 5;0 DECLARER MIWREP;MI_WREP 255 DECLARER MIWMRP;MI_WMREP 255 DECLARER MIOPCA;MI_REPL 1 MI_WREP = *BLANK MI_BI1_AS = *BLANK MI_BI1_AS = :01 MI_FI1_AS = *BLANK MI_FI1_AS = :02 MI_BI1_PC = *BLANK MI_BI1_PC = :03 MI_FI1_PC = *BLANK MI_FI1_PC = :04 MI_REPL = :05 MI_WK = '''' MI_WCMD = *BLANK MI_WLNG = &LONGUEUR_CHAINE(MI_BI1_PC) SI MI_WLNG <> 0 MI_WCAR = &EXTRACTION(MI_BI1_PC;MI_WLNG;1) SI MI_WCAR = '/' MI_WLNG = MI_WLNG - 1 MI_WREP = &EXTRACTION(MI_BI1_PC;1;MI_WLNG) MI_WLNG = MI_WLNG + 1 SINON MI_WREP = MI_BI1_PC MI_BI1_PC = MI_BI1_PC /// '/' FIN SI MI_WMREP <> MI_WREP * Si le répertoire à changé depuis le dernier appel MI_WMREP = *BLANK MI_WMREP = MI_WREP MI_WCMD = *BLANK MI_WCMD = 'MKDIR DIR(' /// MI_WK /// MI_WREP /// MI_WK /// ')' EXECUTER_CMD MI_WCMD SI *IN90 = '1' * Le répertoire existe déjà... FIN FIN FIN MI_WCMD = *BLANK MI_WCMD = ' CPYTOIMPF FROMFILE(' // MI_BI1_AS MI_WCMD = MI_WCMD /// '/' /// MI_FI1_AS /// ')' MI_WCMD = MI_WCMD /// ' TOSTMF(' MI_WCMD = MI_WCMD /// MI_WK /// MI_BI1_PC MI_WCMD = MI_WCMD /// MI_FI1_PC /// MI_WK /// ')' SI MI_REPL = 'A' MI_WCMD = MI_WCMD /// ' MBROPT(*ADD)' SINON MI_WCMD = MI_WCMD /// ' MBROPT(*REPLACE)' FIN MI_WCMD = MI_WCMD /// ' STMFCODPAG(*PCASCII)' MI_WCMD = MI_WCMD /// ' RCDDLM(*CRLF) STRDLM(*NONE)' MI_WCMD = MI_WCMD /// ' FLDDLM(X''05'')' EXECUTER_CMD MI_WCMD SI *IN90 = '1' * Erreur FIN * --------------------------------------------------------------- * * --------------------------------------------------------------- * * CPYTOSTMF * MACRO à USAGE INTERNE * Paramètres=> * 1 => BIB AS400 * 2 => FIC AS400 * 3 => MBR AS400 (Blanc = FIC) * 4 => REPERTOIRE PC * 5 => FICHIER PC * 6 => 'A' pour Ajout sinon Replace * 7 => Caractère de fin ligne *CR *LR *LRCR *CRLR * 8 ==> longueur enregistrement fichier DECLARER MI1LONG;MI_LONG 6;0 DECLARER MIWCMD;MI_WCMD 255 DECLARER MI1IBA;MI_BI1_AS 10 DECLARER MI1ICA;MI_FI1_AS 10 DECLARER MI1IMA;MI_MI1_AS 10 DECLARER MI1IBP;MI_BI1_PC 255 DECLARER MI1ICP;MI_FI1_PC 255 DECLARER MI1IPH;MI_PATH_PC 255 DECLARER MIREPL;MI_REPL 1 DECLARER MICFIN;MI_CFIN 5 DECLARER_TAB MITAB;MI_TABLE 1 255 DECLARER MICLON;MI_LON 6 MI_BI1_AS = *BLANK MI_FI1_AS = *BLANK MI_MI1_AS = *BLANK MI_BI1_PC = *BLANK MI_FI1_PC = *BLANK MI_BI1_AS = :01 MI_FI1_AS = :02 MI_MI1_AS = :03 MI_BI1_PC = :04 MI_FI1_PC = :05 MI_REPL = :06 MI_CFIN = :07 MI_LONG = :08 MI_LON = MI_LONG SI MI_MI1_AS = *BLANK MI_MI1_AS = MI_FI1_AS FIN SI MI_LON = *BLANK MI_LON = '999' FIN MI_WCMD = ' CRTPF FILE(QTEMP/EXPORT)' MI_WCMD = MI_WCMD /// ' RCDLEN(' /// MI_LON /// ')' MI_WCMD = MI_WCMD /// ' Text(''Export condition'')' MI_WCMD = MI_WCMD /// ' SIZE(100000)' EXECUTER_CMD MI_WCMD MI_WCMD = ' CPYF FROMFILE(' /// MI_BI1_AS /// '/' /// MI_FI1_AS /// ')' MI_WCMD = MI_WCMD /// ' TOFILE(QTEMP/EXPORT)' MI_WCMD = MI_WCMD /// ' MBROPT(*REPLACE)' MI_WCMD = MI_WCMD /// ' FMTOPT(*NOCHK)' EXECUTER_CMD MI_WCMD MI_WCMD = ' CPYTOSTMF FROMMBR(''/qsys.lib/qtemp.lib/EXPORT.file/EXPORT.mbr'')' MI_LONG = &LONGUEUR_CHAINE(MI_BI1_PC) PLACER_TABLE MI_BI1_PC MI_TABLE SI MI_TABLE(MI_LONG) = '/' MI_WCMD = MI_WCMD /// ' TOSTMF(''' /// MI_BI1_PC /// MI_FI1_PC /// ''')' SINON MI_WCMD = MI_WCMD /// ' TOSTMF(''' /// MI_BI1_PC /// '/' /// MI_FI1_PC /// ''')' FIN SI MI_REPL = 'A' MI_WCMD = MI_WCMD /// ' STMFOPT(*ADD)' SINON MI_WCMD = MI_WCMD /// ' STMFOPT(*REPLACE)' FIN MI_WCMD = MI_WCMD /// ' ENDLINFMT(' /// MI_CFIN /// ')' MI_WCMD = MI_WCMD /// ' STMFCODPAG(*PCASCII)' EXECUTER_CMD MI_WCMD SI *IN90 = '1' * Erreur FIN MI_WCMD = ' DLTF FILE(QTEMP/EXPORT)' EXECUTER_CMD MI_WCMD