18/04/2024
Windev et les Api Windows
Nb de visiteurs en ligne : 7
>> Introduction <<
>> Codes et Forum <<
>> Download <<
Rubrique
: 5 - Trucs et astuces
Sujet
: Transférer une table mémoire vers excel
Auteur
Message
°¨¨ JL ¨¨°
Posté le : 23/06/2000 12:00:00
Il existe plusieurs moyens pour transférer une table mémoire vers une feuille excel, l'Ole, le fichier texte...
Dans cette procédure, j'utilise le presse-papier et une allocation mémoire.
Dans l'exemple suivant, la table à transférer a pour nom 'tb1'.
Appel de la procédure :
si pas tb1..vide alors
versexcel("tb1")
fin
PROCEDURE versexcel(ntab)
ch est une chaîne
ind est un entier
windowclass est une chaîne ASCIIZ de 8="XLMAIN"
//handle fenetre excel
hwnd est un entier long
hwnd=AppelDLL32("user32","FindWindowExA",Null,Null,&windowclass,Null)
SI hwnd=0 ALORS
AppelDLL32("shell32.dll","ShellExecuteA",Handle(),Null,"Excel","",Null,1)
Multitache(200)
FIN
hwnd=AppelDLL32("user32","FindWindowExA",Null,Null,&windowclass,Null)
SI hwnd ALORS
AppelDLL32("user32","ShowWindow",hwnd,1)
SI AppelDLL32("user32","OpenClipboard",Handle()) ALORS
AppelDLL32("user32","EmptyClipboard")
hwndc est un entier long
hwndg est un entier long = appeldll32("kernel32","GlobalAlloc",0x2,10000000)
SI hwndg ALORS
hwndc = AppelDLL32("kernel32","GlobalLock",hwndg)
POUR ind=1 A TableOccurrence(ntab,2)
ch+={infoobjet(ntab,26,ind)}..Libelle+tab
FIN
ch+=RC
AppelDLL32("kernel32","RtlMoveMemory",hwndc,&ch,Taille(ch))
pos est un entier long = hwndc+taille(ch)
POUR ind=1 A {ntab}..Occurrence
ch={ntab}[ind]+RC
AppelDLL32("kernel32","RtlMoveMemory",pos,&ch,Taille(ch))
pos+=Taille(ch)
FIN
AppelDLL32("kernel32","GlobalUnlock",hwndg)
AppelDLL32("user32","SetClipboardData",0x1,hwndg)
FIN
FIN
AppelDLL32("user32","CloseClipboard")
// Edition/Coller
EnvoieTouche("%{E}",hwnd)
EnvoieTouche("o",hwnd)
AppelDLL32("kernel32","GlobalFree",hwndg)
AppelDLL32("user32","EmptyClipboard")
fin