18/04/2024
Windev et les Api WindowsNb 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