- Présentation :
- Dans ce tutoriel nous allons aborder les mécanismes de communication entre Excel et AutoIT, autrement dit nous allons voir comment utiliser les méthodes issue du modèle Objet Excel dans AutoIT. Certes il existe de nombreux UDF, comme ExcelCOM permettant de manipuler Excel ces mêmes fonctions semblent d'ailleurs avoir été intégré à la version d'AutoIT 3.3, mais en utilisant ces fonctions on peut se retrouver bloquer sur certaines fonctionnalités non prise en compte dans la librairie et surtout on ne comprend absolument pas ce qui se passe derrière. Comprendre ces mécanismes de communication c'est se donner les moyens d'adapter la libraire à ses besoins.
- Version 0.2
- Date de dernière mise à jour le 10/09/2009
- Ajout du Hacks 9 : Recherche d'une valeur dans un range avec la méthode Find (plage)
- Ajout du Hacks 10 : Tester l'existence d'instance Excel en cours d'execution
- Connaître le modèle Objet Excel - si vous ne le connaissez pas je vous propose un peu de lecture ici
- Quelques connaissances succinctes en VBA
- Les bases d'utilisation de la programmation AutoIT
- Avoir Excel installé sur la machine faisant tourné le script... cela va de soit
IntroductionNous allons donc voir en premier temps présenter Microsoft COM et plus particulièrement le processus d'Automation COM que l'on va utiliser dans AutoIT pour manipuler automatiquement Excel. On fera un rappel rapide sur le modèle Objet Excel.
1 - Microsoft COM et Excel- Microsoft COM (Component Object Model) est un standard permettant de définir des API objet, c'est-à-dire permettant à des applications de communiquer par l'intermédiaire d'objets possédant un certain nombre de méthodes et de propriétés publiques. On rappelle qu'il existe deux caractéristiques à la notion d'Objet, les propriétés qui caractérise l'objet et les méthodes qui définissent des fonctions internes de cet objet. On peut citer les objets ActiveX qui sont un type particulier d'objets COM.
Microsoft COM fournit des mécanismes permettant des liens entre applications, parmi lesquels :- liaisons dynamiques entre applications appelés OLE (Object Link and Embedding) pour la liaison et incorporation d'objets par exemple de lier un fichier tableur dans un document
- mécanismes d'échanges de messages dynamiques entre applications, appelés DDE (Dynamic Data Exchange).
- mécanismes d'automates (automation) permettant de prendre contrôle d'une application à distance.
2 - Notions sur le modèle Objet Excel- Je ne vais pas vous faire un rappel total du modèle Objet Excel mais au moins vous présenter rapidement l'essentielle à connaître.
Classe, Objet, Attribut, Méthode et Collection
Excel possède une hiérarchie d'objets organisée en arbre et chaque objet possède des membres (attributs+méthodes). Les attributs sont des variables typés (Int, Float, String, Object ...) ou des collections et permettent de décrire l'objet. Une collection d'objet est l'ensemble des objets d'une classe, tandis qu'une classe d'un objet désigne la définition commune d'un ensemble d'objets (dans Excel une collection de l'objet Object sera nommé Objects). Enfin chaque objet possède aussi des méthodes qui décrivent les comportements de l'objet.
Quelques exemples de ces notions dans Excel :- Un objet de la classe Workbook possède la méthode SaveAs pour sauvegarder le classeur dans un chemin spécifique. Il possède aussi l'attribut ActiveSheet qui est une String contenant la feuille courante active de ce WorkBook (L'objet Workbook possède évidement bien d'autres membres)
- La collection WorkBooks renvoie tous les objets Workbook, autrement dit tous les classes ouverts.
- La collection WorkSheets renvoie toutes les feuilles d'un objet Workbook.
Lorsqu'on créer une instance d'une classe, c'est à dire un objet. Cet objet possède tous les attributs et méthodes définies dans la classe de l'objet. Il s'agit de l'étape d'instanciation en programmation objet. C'est pour ça qu'on confondra fréquemment le terme objet avec le terme instance. Une instance d'une classe est un objet.
Hiérarchie du modèle objet Excel
Tout en haut du modèle objet Excel ce trouve l'objet Application. Il possède de nombreux attributs et méthodes dont notamment la collection Workbooks qui est un attribut de l'objet Application et qui désigne l'ensemble des classeurs ouverts (Instance Workbook). Une instance Workbook correspond à un classeur et donc à un fichier xls. Une instance Worksheet correspond à une feuille de calcul. Les objets de type Worksheet sont référencés dans la collection Worksheets d'une instance Workbook. Une instance Range est une collection de cellules présentes dans une feuille de calcul.
Si vous voulez plus de lecture sur le modèle objet Excel c'est par la :
3 - Automation Excel dans AutoIT- Pour pouvoir prendre la main sur Excel dans AutoIT, il suffit de taper la ligne de code suivante La fonction ObjCreate d'autoIT permet de créer une référence sur le COM Object de l'application ciblé (ici dans l'exemple, il s'agit d'Excel) et ainsi d'accéder à ces méthodes et attributs. Autrement dit avec cette fonction, on va atteindre le point le plus haut du modèle objet Excel c'est à dire l'objet Application, à partir duquel on va pouvoir utiliser toutes les membres que l'on veut. Si on exécute juste cette ligne de code, on peut contrôler dans le gestionnaire de tâche de Windows qu'un processus Excel a bien été lancé.
Code : Tout sélectionner
$oExcel = ObjCreate("Excel.Application")
Par exemple on va utiliser l'attribut Visible de l'instance $oExcel pour rendre l'application Excel visible. Il suffit d'utiliser le caractère "." pour appliquer un membre sur une instance, ainsi :On peut aussi utiliser la méthode Add de la collection Worbooks qui est l'attribut de l'instance $oExcel pour ajouter un nouveau workbook dans cette instance. On rappelle qu'un Workbook est un classeur et correspond donc à un fichier excel xls.Code : Tout sélectionner
$oExcel.Visible = 1 ; Rend l'instance $oExcel visible
Pour appliquer plusieurs attributs et méthodes en même temps sur l'instance $oExcel, AutoIT nous fournit les mots-clefs WITH [...] ENDWITH qui s'utilise de la manière suivante :Code : Tout sélectionner
$oExcel.WorkBooks.Add ; Ajoute un nouveau workbook
Pas besoin de plus pour comprendre le processus d'automation COM avec Excel, c'est la connaissance du modèle Objet Excel qui va vous permettre de programmer ce que vous voulez... autrement dit tout ce qu'un humain peut faire dans Excel correspond à la modification d'attributs d'objets Excel ou à l'utilisation de méthodes.Code : Tout sélectionner
Local $oExcel = ObjCreate("Excel.Application") With $oExcel .Visible = 1 .WorkBooks.Add EndWith
Hacks ExcelDans la suite du tutoriel, je ne vais pas vous donner la liste de touts les attributs et méthodes possibles mais celles qui me paraissent pertinentes à travers le descriptif de plusieurs exemples.
1 - Créer une feuille Excel2 - Sauvegarder sous► Afficher le texte3 - Compter le nombre de colonnes et de lignes utilisées dans une feuille► Afficher le texte4 - Autofit sur les colonnes d'une feuille► Afficher le texte5 - Copier une feuille dans une nouvelle feuille du même classeur► Afficher le texte6 - Effectuer un tri sur une colonne► Afficher le texte7 - Utiliser un filtre élaboré Excel► Afficher le texte8 - Convertir un fichier csv en un fichier Excel► Afficher le texte9 - Recherche d'une valeur dans un range avec la méthode Find (plage)► Afficher le texte10 - Tester l'existence d'instance Excel en cours d'execution► Afficher le texte► Afficher le texte
1 - Comment traduire une action humaine sous Excel dans AutoIt
- Je vous donne ici une petite astuce vous permettant de traduire une action humain sous Excel dans AutoIT.
- Tout d'abord vous allez enregistrer une macro dans Excel correspondant à l'action que vous souhaiter automatiser dans AutoIT.
- Une fois la macro enregistrer vous allez lire le code VBA généré dans le Visual Basic Editor d'Excel. Vous avez ainsi une idée des attributs et des méthodes utilisées.
- Ensuite vous pouvez vous rendre sur le site http://social.msdn.microsoft.com/Search/fr-FR/ afin de rechercher tel méthode ou attribut. Ainsi vous aurez le descriptif de la signature et vous pourrez l'appliquer à vos besoins.
2 - Microsoft Office VBA Constants pour AutoIT
- Il arrive souvent que les méthodes ou attributs utilisées dans Excel utilise certaines constantes particulières qu'il faut bien traduire dans AutoIT.
Par exemple le paramètre missing en VBA est traduit en Default dans AutoIT. Ou encore le paramètre $xlFilterInPlace utilisé dans la méthode AdvancedFilter qui précise à cette méthode si elle doit laissé les données filtrées en place est traduit dans Excel par la valeur $xlFilterInPlace = 1.
Voici un lien ou vous trouverez toutes les constantes Microsoft Office pour Excel, Outlook, Access, FrontPage, Document Imaging, et MS Graphing. Microsoft Office VBA Constants
Je n'ai pas eu le courage de relire pour corriger les feâuthes... ni vérifier qu'aucune erreur ne se soit glissé dans les exemples de code... ^^ merci pour votre indulgence ^^