Comment créer et exécuter une macro dans LibreOffice Calc sous Linux

LibreOffice est la réponse du monde FOSS à la suite Microsoft Office grand public et propriétaire. Développé par les principaux développeurs et contributeurs de logiciels de productivité Office, il offre un remplacement complet pour Microsoft Office sur plusieurs systèmes d'exploitation.

L'équivalent de l'application LibreOffice de Microsoft Excel s'appelle LibreOffice Calc. Il est livré avec un certain nombre de fonctionnalités et une interface similaire à Excel. Il dispose d'un moteur de macros intégré pour développer et exécuter des macros pour l'automatisation. Cependant, il ne prend pas en charge Visual Basic, mais prend en charge son propre langage ; LibreOffice Basic, pour programmer des macros.

La suite LibreOffice est préinstallée dans la plupart des distributions Linux, notamment Ubuntu, Debian, Fedora et CentOS.

Créer et exécuter une macro dans LibreOffice Calc

Tout d'abord, créons une feuille de calcul avec des exemples de données.

Pour ouvrir l'organisateur de macros, accédez à Outils » Macros » Organiser les macros » Les bases de LibreOffice. Il ouvrira le Macros de base de LibreOffice fenêtre comme indiqué dans la capture d'écran ci-dessous.

Saisissez un nouveau nom pour la macro, puis cliquez sur le bouton Nouveau en bas à droite de la fenêtre.

Vous devriez maintenant voir l'écran de l'éditeur de macros dans LibreOffice Basic.

Comme nous pouvons le voir, les macros créées manuellement sont par défaut créées sous « Mes macros et boîtes de dialogue -> Standard -> Module1 ».

Actuellement, il y a deux macros présentes : l'une est Principale, qui est une macro vide par défaut, et other est test, la macro que nous avons créée ci-dessus. Nous allons maintenant améliorer la macro de test.

Notre macro effectuera les tâches suivantes :

  • Vérifiez que toutes les personnes ont une profession d'écrivain
  • Créer une nouvelle feuille
  • Déplacer toutes les entrées pour les rédacteurs dans une nouvelle feuille

Voici notre macro :

Sous-test rem Déplacer les entrées avec la profession Writer vers une nouvelle feuille dim crs(8) comme objet dim j comme entier dim prof comme objet dim i comme entier dim sh comme objet dim sh2 comme objet sh = ThisComponent.Sheets(0) crs(0) = sh.getCellRangeByPosition(0, 0, 3, 0) j = 1 pour i = 1 à 5 x = 1 prof = sh.GetCellByPosition(3, i) rem Stocke la ligne complète dans la variable Si prof.string = "Writer" Then crs(j) = sh.getCellRangeByPosition(0, i, 3, i) j = j + 1 End If next i rem Maintenant, créez une nouvelle feuille et écrivez ces données là ThisComponent.Sheets.insertNewByName ("Writers", 1) sh2 = ThisComponent.Sheets(1) i = 0 Faire sans IsNull(crs(i)) sh2range = sh2.getCellRangeByPosition(0, i, 3, i) sh2range.setDataArray(crs(i).getDataArray) i = i + 1 Sous-titre de fin de boucle

Laissez-moi vous expliquer la macro ci-dessus section par section.

Sous-test. . . Fin du sous-marin

test est le nom de notre macro, donc dans le code, il est noté comme Sous-test (sous = sous-programme). De même, nous terminons ce code de macro par l'instruction Fin du sous-marin. Notez que ces instructions sont automatiquement ajoutées lorsque nous créons une macro à partir du menu, bien que l'utilisateur puisse directement écrire le code de la macro ici et le nom du sous-programme sera considéré comme le nom de la macro.

rem 

Tous les commentaires dans LibreOffice Basic commencent par le mot-clé rem. Une ligne complète commençant par rem est considérée comme un commentaire. Une autre façon est d'utiliser ' (simple virgule inversée) en début de ligne.

dim crs(8) comme objet dim j comme entier dim prof comme objet dim i comme entier dim sh comme objet dim sh2 comme objet

Il s'agit de la déclaration de variable dans LibreOffice Basic. La syntaxe générale est assombrir comme . Pour déclarer un tableau, utilisez une syntaxe similaire à la variable crs, où 8 est la longueur du tableau.

sh = ThisComponent.Sheets(0) crs(0) = sh.getCellRangeByPosition(0, 0, 3, 0) j = 1

Ce Composant fait référence au document en cours. Dans ce cas, il s'agit d'une feuille de calcul Calc. Nous chargeons Sheet avec l'indice 0, c'est-à-dire la première feuille, dans la variable sh. Il existe également des fonctions pour charger une feuille en utilisant son nom.

Ensuite, nous appelons la fonction getCellRangeByPosition de l'objet sh et le charger dans le tableau crs. La plage de cellules fait référence à un groupe de cellules dans la feuille en fonction de la position.

Notez que les arguments, 0, 0 (colonne 0, ligne 0) désignent la cellule de départ de la plage, et 3, 0 (colonne 3, ligne 0) désignent la cellule de fin de la plage. Ainsi 0, 0, 3, 0 fait référence à la première ligne (en-tête) de notre feuille d'échantillons.

pour i = 1 à 5 x = 1 prof = sh.GetCellByPosition(3, i) rem Stocker la ligne complète dans la variable If prof.string = "Writer" Then crs(j) = sh.getCellRangeByPosition(0, i, 3, i ) j = j + 1 Fin Si suivant i

Nous utilisons un pour instruction pour parcourir les lignes. le pour le bloc se termine par un suivant instruction, qui incrémente la variable i à la fin de chaque itération.

Ensuite, nous appelons une fonction ObtenirCelluleParPosition de l'objet sh. Nous passons des paramètres (3, je), c'est-à-dire qu'à chaque itération, l'objet de la cellule de la colonne 3 et de la ligne i est récupéré dans la variable prof.

Ensuite, nous utilisons un Si instruction pour vérifier si la valeur dans la cellule prof est "Writer". Si c'est le cas, nous appelons à nouveau la fonction getCellRangeByPosition, cette fois, avec je à la place du numéro de ligne de début et de fin. Encore une fois, nous le stockons dans le tableau crs.

ThisComponent.Sheets.insertNewByName("Writers", 1) sh2 = ThisComponent.Sheets(1)

Nous créons d'abord une nouvelle feuille avec le nom Écrivains, au poste 1, qui est la 2ème position, car l'index commence à 0. Ensuite, nous obtenons un objet de cette feuille nouvellement créée, afin que nous puissions entrer les données des rédacteurs dans cette feuille.

i = 0 Faire sans IsNull(crs(i)) sh2range = sh2.getCellRangeByPosition(0, i, 3, i) sh2range.setDataArray(crs(i).getDataArray) i = i + 1 boucle

le Faire pendant L'instruction loop est utilisée lorsque nous voulons effectuer une boucle en fonction de conditions, par opposition à une boucle dans une plage de valeurs entières, pour laquelle use use pour comme montré précédemment. Ici, on boucle jusqu'à crs(i) est non nulle.

Ensuite, nous appelons à nouveau getCellRangeByPosition de la même manière qu'auparavant pour obtenir un objet de plage dans la nouvelle feuille.

Enfin, nous appelons deux fonctions : getDataArray qui renvoie les données de crs(i), c'est-à-dire une ligne de données (à propos d'un rédacteur) de la première feuille ; et nous écrivons ces données dans la plage de cellules dans une nouvelle feuille en utilisant setDataArray.

Enfin, enregistrez la macro de Fichier » Enregistrer tout option.

Pour exécuter la macro, accédez à Outils » Macros » Exécuter une macro et sélectionnez votre macro dans le répertoire "Mes macros" de la bibliothèque du sélecteur de macros. Clique le Courir après avoir sélectionné un nom de macro.

L'exécution de la macro ci-dessus sur notre exemple de feuille de calcul produit le résultat suivant.

C'est la façon de créer des macros dans LibreOffice. Pour plus d'informations et d'options, reportez-vous à la documentation officielle.

? Acclamations!