[WD19] Pilotage Excel via OLE

Depuis votre application Windev, il est possible de piloter des applications Windows via le protocole OLE (“Object Linking and Embedding”). Par exemple vous pouvez créer une feuille Excel formatée avec un ensemble de données reprises dans un tableau : colorez telles cellules en rouge, modifiez la mise en page, modifiez le zoom actif, changez l’orientation de l’impression, etc.

Tout d’abord, il faut définir la variable qui va permettre l’interaction avec le processus Excel et l’appel des différentes méthodes pour mettre en forme notre futur document. Cette variable est de type “Objet OLE dynamique”. On va l’initialiser d’abord avec la valeur retournée par la fonction ObjetActif(), puis déterminer l’action à effectuer en fonction du retour.

Ce qui est réalisé ci-dessus :

  • On définit la variable de type “Objet OLE dynamique”.
  • On l’initialise avec la fonction ObjetActif, à laquelle on passe en paramètre le nom du serveur automation, à savoir “Excel.Application”.
  • Dans l’instruction “Selon”, on va vérifier si le résultat est à Null : si c’est le cas, cela veut dire qu’il n’y a aucun fichier Excel actif, et on peut allouer un nouvel objet de type “Excel.Application”. Dans les autres cas, cela signifie qu’il y a un fichier en cours d’édition. On va alors appeler la méthode “Quit()” de l’objet, en utilisant l’opérateur “>>” (exemple : “monFichierXls>>Quit()”), détruire l’objet, puis réaliser une nouvelle allocation.

Note : les objets Automation sont automatiquement détruits à la fin du traitement, cependant, si vous souhaitez libérer des objets plus tôt, utilisez le mot-clé “libérer” (exemple : “libérer monFichierXls”).

Lorsqu’on a réalisé cette opération, on peut alors commencer la création et l’édition d’une feuille dans le nouveau document, et même la renommer. Tout d’abord, on va faire en sorte qu’Excel soit rendu invisible : on ne le verra pas dans la barre de tâches, même si son processus est actif. Ensuite on va initialiser le classeur, qui contiendra ses 3 feuilles. La première est automatiquement “activée”.

Ce qu’on fait dans l’étape ci-dessus :

  • On modifie la propriété OLE “Visible” à “OLEFaux” (le code étant alors “monFichierXls>>Visible=OLEFaux”), afin qu’Excel soit masqué.
  • On va ajouter un classeur, grâce à la méthode Workbooks.Add(). Si on veut traduire cela en code WLangage, cela donne alors quelque chose comme : “monFichierXls>>WorkBooks>>Add()”. Réf : Plus d’informations à propos de cette méthode.
  • On va définir le nom de la feuille active grâce à la propriété Application.ActiveSheet.Name. C’est toujours le même principe : on utilise l’opérateur “>>” à chaque niveau. Du coup, on obtient quelque chose comme “monFichierXls>>ActiveSheet>>Name = VALEUR” en WLangage.

Après, on peut s’amuser à définir le contenu d’une cellule à partir des indices de ligne et de colonne. Dans Excel, les colonnes sont nommées de A à ZZ mais sont indicées à partir de 1, tout comme les lignes. On peut aussi modifier la taille de la police, l’apparence, la couleur de fond, etc.

Pour interagir avec la cellule qui nous intéresse, on utilise ActiveSheet.Cells(x, y). X étant l’indice de ligne et Y l’indice de colonne. Chaque cellule possède un nombre d’éléments qui peuvent être édités, telles que Font (pour la police), HorizontalAlignment (pour définir l’alignement du texte par exemple), Interior, etc. C’est comme ça qu’on définit la taille de la police…

Quelques exemples :

  • monFichierXls>>ActiveSheet>>Cells(1,2)>>Font>>Bold = True
  • monFichierXls>>ActiveSheet>>Cells(1,2)>>Font>>Size = 16
  • monFichierXls>>ActiveSheet>>Cells(1,2)>>Interior>>ColorIndex = 56

Détail des exemples ci-dessus : le premier met la police de la cellule B1 (1, 2) en gras. Le second définit sa taille à 16. Enfin, le troisième définit la couleur de fond numéro 56 selon l’index de couleurs défini dans Excel. Voici la palette :

Il est bien sûr possible d’indiquer sa propre couleur avec la propriété Color, dans laquelle on stocke la valeur de la fonction RGB() proposée par Windev. Le site Excel-Pratique donne des exemples de valeurs à utiliser avec cette fonction…

Pour mettre en page, on peut jouer avec les propriétés de l’objet ActiveSheet.PageSetup. La propriété Orientation permet de choisir entre le mode paysage (ici, la valeur est alors égale à 2) ou portrait. Les propriétés Left*, Top*, Bottom* et RightMargin permettent de définir les marges. Enfin la propriété Zoom permet de définir la valeur du zoom ce qui peut aider pour faire rentrer la feuille complète sur la page.

Enfin pour terminer et sauvegarder le fichier Excel, il faut désactiver l’affichage des alertes, appeler la méthode “SaveAs()” en indiquant en paramètre le nom du fichier, réactiver les alertes, fermer le classeur et quitter Excel. Il ne restera plus qu’à détruire l’objet !

Dans l’ordre :

  • On a désactivé les alertes : “monFichierXls>>DisplayAlerts = False”.
  • On a sauvegardé le fichier à l’aide de SaveAs(). Plus d’informations dans la documentation officielle située ici : référence MSDN FF841185.
  • Réactivation des alertes.
  • Fermeture du classeur : “monFichierXls>>ActiveWorkbook>>Close()”.
  • Fermeture d’Excel : “monFichierXls>>Quit()”.
  • Destruction de l’objet avec le mot-clé “libérer”.

Il est bien sûr possible d’en faire plus, car il existe de nombreuses méthodes, de nombreux objets, et un tas de propriétés associées à ceux-ci ! On peut par exemple définir une formule, modifier un ensemble de cellules plutôt qu’une seule à la fois, et encore bien d’autres choses. Bon développement à tous !

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *