Ici, grâce aux noms des cellules, il est aussi facile que Word de remplir les données de l’entête.
Le remplissage du tableau des commandes se fera avec la commande XLSETLINE.
Puis, pour délimiter le tableau, nous faisons appel à une macro.
Source du programme RPG pour Excel
*******************************************************************
* Fichiers utilisés: SP_CUST --> Fichier clients *
* SP_ORD_ID --> Fichier commandes (ORDERS) LF*
* SP_DET_OR --> Fichier détail (DETAIL) LF *
*******************************************************************
FSP_CUST if e k disk
FSP_ORD_ID if e k disk
FSP_DET_OR if e k disk
*******************************************************************
* Déclaration des variables utilisées par LAUNCHER/400. *
*******************************************************************
DHANDLE s 50 inz('*ONLY')
DSVRADDR s 30 inz('*DEV')
DCCSID s 10 inz('*JOB')
DLNCCMD s 10 inz(*blanks)
DLNCPARM1 s 512 inz(*blanks)
DLNCPARM2 s 1024 inz(*blanks)
DLNCOPT s 1 inz(*blanks)
DLNCRESULT s 512 inz(*blanks)
*******************************************************************
* Variables utilisées par le programme *
*******************************************************************
DPREMIER s 9 inz(*blanks)
DDATECMD s d datfmt(*EUR)
DDATECMDS s 10 inz(*blanks)
DPRIXUP s 8p 0 inz(0)
DPRIXTP s 8p 0 inz(0)
DPRIXU s 8 inz(*blanks)
DPRIXT s 8 inz(*blanks)
DQTE s 10 inz(*blanks)
DRECORD s 9
*******************************************************************
* Point d’entrée du programme *
*******************************************************************
c *ENTRY PLIST
c premier PARM record
*******************************************************************
* Chaînage sur le client voulu *
*******************************************************************
c PREMIER chain SP_CUST 90
*
* Connexion à LAUNCHER/400. Le serveur est adressé par la variable
* SVRADDR. *DEV signifie que l’on travaille sur le serveur qui émule
* l’écran courant (utilisation du écran 5250).
*
c call 'LNCOPEN'
c parm handle
c parm svraddr
c parm ccsid
*------------------------------------------------------------------
* Edition d'un document de vente à envoyer par mail
*------------------------------------------------------------------
c eval lnccmd='WORDOPEN'
c exsr CALLLNC
c eval lnccmd='WMINIMIZE'
c exsr CALLLNC
* Création d’un nouveau document sur la base d’un modèle existant
c eval lnccmd='XLOPENFILE'
c eval lncparm1='%LNCDIR%\Samples'+
c '\letter.xlt'
c exsr CALLLNC
c eval lnccmd='XLMINIMIZE'
c exsr CALLLNC
* Utilisation des noms de cellule pour l’entête
c eval lnccmd='XLSETTEXT'
c eval lncparm1='NAME'
c eval lncparm2=firstname + lastname
c exsr CALLLNC
c eval lncparm1='ADDRESS'
c eval lncparm2=
c exsr CALLLNC
c eval lncparm1='ZIP'
c eval lncparm2=
c exsr CALLLNC
c eval lncparm1='CITY'
c eval lncparm2=
c exsr CALLLNC
c eval lncparm1='STATE'
c eval lncparm2=
c exsr CALLLNC
c eval lncparm1='PHONE'
c eval lncparm2=
c exsr CALLLNC
c eval lncparm1='FAX'
c eval lncparm2=
c exsr CALLLNC
c eval lncparm1='EMAIL'
c eval lncparm2=
c exsr CALLLNC
* Routine qui va lire toutes les commandes du client.
* Travail sur le fichier de commandes
c cust_id setll sp_ord_id
c cust_id reade sp_ord_id 91
c 91 goto Fin
* On va à la première cellule de donnée
c eval lnccmd='XLGOTOCELL'
c eval lncparm1='TABLE'
c eval lncparm2=
c exsr CALLLNC
c loop_order tag
c move ORDER_DATE datecmd
c movel datecmd datecmds
* Puis le détail de chaque commande
c order_id setll sp_det_or
c order_id reade sp_det_or 92
c 92 goto Suite
c loop_detail tag
c eval lnccmd='XLSETLINE'
c eval PRIXUP=
c movel prixup prixu
c movel(p) QUANTITY QTE
c eval PRIXTP=
c movel prixtp prixt
c eval lncparm1=datecmds + '%SEP%' +
c PART_DESC + '%SEP%' + prixu +
c '%SEP%' + QTE + '%SEP%'
c + PRIXT
c exsr CALLLNC
* On lit le prochain détail de commande
c order_id reade sp_det_or 92
c N92 goto loop_detail
c Suite tag
* On lit ici la prochaine commande
c cust_id reade sp_ord_id 93
c N93 goto loop_order
* Sauvegarde et envoi
c Fin tag
* Petite macro pour faire la mise en page
c eval lnccmd='XLEXEMACRO'
c eval lncparm1='PageSetup'
c exsr CALLLNC
c eval lnccmd='XLSAVEAS'
c eval lncparm1='%LNCDIR%\samples\'
c + firstname + '.xls'
c eval lncparm2=
c exsr CALLLNC
c eval lnccmd='XLSENDTO'
c eval lncparm1=
* La ligne suivante n’est pas exécutée
* c exsr CALLLNC
c eval lnccmd='XLMAXIMIZE'
c exsr CALLLNC
c seton lr
* Déconnexion du serveur
c eval lnccmd='END'
c exsr CALLLNC
c call 'LNCCLOSE'
c parm HANDLE