Deprecated: Array and string offset access syntax with curly braces is deprecated in /home/unareil/www/wiki/inc/init.php on line 557
====== Le but de cet article est de vous apprendre à vous initier à Libre Office macro. ======
Nous allons au travers de cet article réaliser quelques exemples de façon à mieux comprendre le fonctionnement du Basic dans Libre Office Macro.
**Résumé :**
Libre Office Macro Basic est un langage de programmation fourni avec Libre Office.
Il permet de réaliser des portions de codes informatique nous permettant de nous simplifier la vie et interagir avec la suite bureautique Libre Office.
Dans cet article nous allons créer des morceaux de codes de façon à nous familiariser avec le langage Basic et l’api de Libre Office.
Ainsi à l’aide des macros nous allons créer une facture au format odt
Ce code a été testé avec Libre Office Version : 4.2.8.2 sous Ubuntu 14.04.
**Les outils**
Afin de mettre en place ce how-to, il nous faut les ingrédients suivants :
* Un système d’exploitation sur lequel il est possible d’installer Libre Office (ici Ubuntu 14.04 LTS).
* Libre Office (ici Libre Office Version : 4.2.8.2) si celui-ci n’est pas déjà installé par votre système d’exploitation :
$ sudo apt-get install libreoffice
**Préparation**
Il faut tout d’abord ouvrir un document de la suite Libre Office (dans cet exemple, le document utilisé sera un document Calc vide intitulé docPrincipal.ods).
Afin d’accéder au macro dans Libre Office, il faut utiliser le chemin suivant : Outils - Macros - Gérer les macros - LibreOffice Basic …
Puis afin de créer la macro dans le fichier ods docPrincipal.ods, il faut utiliser la démarche suivante :
Clic sur docPrincipal.ods, Clic sur Standard et enfin Clic sur le bouton Nouveau.
A ce moment une boite de dialogue demande un nom pour le module de macro Basic, nous allons l’appeler monModuleLinuxMag et faire un clic sur OK.
**L’environnement LibreOffice Basic s’ouvre alors :**
La première ligne que nous apercevons dans la fenêtre de droite (REM ***** BASIC *****) est une ligne de commentaire. Nous pouvons également écrire des commentaires en Basic en utilisant la simple quote.
REM (sur une ligne entière)
et la simple quote : ’ ceci est une remarque
Pour se lancer une macro doit avoir ses les lignes de codes situées entre Sub leNomDeLamethode et End Sub.
Par défaut LibreOffice Basic créé la méthode Sub Main et End Sub
Afin de faciliter le repérage dans les lignes du code, nous allons également faire apparaître les numéros de ligne en utilisant la manipulation suivante : Clic dans le menu Affichage puis sélection Numéros de ligne.
**Phase 1 :** création de notre première macro : le fameux « Bonjour le monde »
Il est de tradition lorsque nous rencontrons un nouveau langage en programmation d’utiliser un message affichant « Bonjour le monde » (Hello Word ! Pour les anglophones), c’est ce que nous allons faire avec Libre Office Basic.
Pour ce faire nous allons remplacer tout le code contenu dans la fenêtre de droite et le remplacer par celui-ci :
REM ***** MON PREMIER PROGRAMME EN BASIC *****
Sub premierProgramme ’Indique le début du programme
msgbox "Bonjour le monde !" ’Affiche une boite de dialogue à l’écran bonjour le monde !
End Sub ’Indique la fin du programme
**Pour éxécuter notre code, il ne nous reste plus qu’à le lancer en appuyant sur Exécuter le Basic**
ou en cliquant sur exécuter une macro, puis en sélectionnant la macro voulue (ici premierProgramme) puis Clic sur Exécuter.
Vous deviez alors avoir cette petite boite de dialogue qui s’affiche à l’écran :
**Phase 2 :** Accéder à une cellule Calc et afficher son contenu.
Pour interagir avec les éléments d’un document Libre Office, nous allons devoir manipuler les objets contenus sous Libre Office à la manière d’un arbre d’objets voir le schéma ci-dessous :
Ainsi pour accéder à une cellule d’une feuille de calcul de Calc (je pars de l’hypothèse que Calc est déjà lancé, la procédure étant légèrement différente s’il faut en plus ouvrir le document, j’en reparlerai par la suite), nous avons besoin :
d’accéder au document en cours (ThisComponent)
d’accéder au niveau du document en cours à la feuille appelée Feuille1 (sheets.getByName("Feuille1"))
d’accéder au niveau de la feuille1 à la cellule appelée C2 (feuille.getCellRangeByName("C2"))
Pour notre exemple, nous allons afficher un message Bonjour suivi du prénom de la personne saisi dans la cellule C2.
Voici le code ci-dessous correspondant :
REM ***** AFFICHE LE CONTENU D’UNE CELLULE *****
Sub afficheContenuCellule ’Indique le début du programme
REM * déclaration des variables à utiliser *
dim monDoc as object ’déclaration d’une variable monDoc as object
dim feuille as object ’déclaration d’une variable feuille as object
dim cellule as Object ’déclaration d’une variable cellule as object
monDoc = ThisComponent ’Sélectionne le document en cours
feuille=Mondoc.sheets.getByName("Feuille1") ’Sélectionne la feuille nommée Feuille1
cellule=feuille.getCellRangeByName("C2") ’Sélectionne la cellule nommée C2
msgbox "Bonjour " + cellule.string ’Affiche à l’écran bonjour suivi du prénom situé en C2
End Sub ’Indique la fin du programme
En cliquant sur exécuter une macro, puis en sélectionnant la macro voulue (ici afficheContenuCellule) puis Clic sur Exécuter, vous devriez avoir une boite de dialogue qui affiche Bonjour suivi du contenu de la cellule.
Quelques petites remarque sur le code ci-dessus :
Afin de déclarer une variable en Basic, nous utilisons
dim nomDeLaVariable as TypeDeLaVariable ici par exemple dim feuille as object nous déclarons une variable à l’intérieur de notre procédure qui s’appelle feuille et qui est de type object.
Pour afficher une chaîne de caractère ou une date contenue dans la cellule, nous utilisons le nomDeLaCellule.string ici cellule.string, si nous voulons afficher une valeur numérique (ou manipuler un format de type date), nous utilisons cellule.value et enfin si nous souhaitons afficher une formule contenue dans la cellule, nous utilisons cellule.formula pour la formule au format anglais ou cellule.formulaLocal pour la formule au format local, dans notre cas de figure en français.
Phase 3 : Ouvrir un fichier existant et afficher le contenu d’une cellule dans ce fichier.
Jusqu’à présent, nous avons manipuler les macros avec le document Calc en cours, maintenant, nous allons ouvrir un autre fichier Calc à partir du document Calc en cours d’exécution, pour cela nous avons besoin :
de l’adresse du document que nous avons besoin d’ouvrir à convertir dans un format d’adresse valide convertToURL("\leCheminDuFichier\leFichier.ods")
du composant et de la méthode permettant d’ouvrir un fichier StarDesktop.loadComponentFromURL(…)
Pour notre exemple, nous allons afficher la cellule D3 du fichier "Martineau Aurélien.ods" dont voici un extrait ci_dessous :
Voici le code ci-dessous correspondant :
Sub afficherValFichExist()
dim monDoc,feuille,cellule as object ’indique les variables de type object
dim adresseContratSousLinux,adresseContratSousWindows,nomCellule as string ’variables de type chaîne
’adresse pour un ordinateur sous Linux Ubuntu
adresseContratSousLinux = convertToURL("/home/am/contrats/coursIDRAC/MARTINEAU Aurélien.ods")
’adresse pour un ordinateur sous Windows 8
adresseContratSousWindows = convertToURL("C :\Users\am\contrats\coursIDRAC\MARTINEAU Aurélien.ods")
’Ouvre le document dont l’adresse est indiquée en paramètre et le stocke dans la variable monDoc
monDoc = StarDesktop.loadComponentFromURL(adresseContratSousLinux, "_blank", 0, Array() )
feuille=monDoc.sheets("cours") ’sélectionne la feuille ou se situe les cours
nomCellule="D" & "3" ’indique le nom de la cellule nommée D3 dans la variable nomCellule
cellule=feuille.getCellRangeByName(nomCellule) ’Sélectionne la cellule passée en paramètre
msgbox "La valeur de la cellule : " + cellule.string ’Affiche à l’écran la valeur de la cellule D3
End Sub
En cliquant sur exécuter une macro, puis en sélectionnant la macro voulue (ici afficherValFichExist) puis Clic sur Exécuter, vous devriez avoir une boite de dialogue qui affiche « La valeur de la cellule : BTS MUC/NRC 1 ALT - 15/16 ».
Quelques petites remarque sur le code ci-dessus :
Pour déclarer plusieurs variables d’un même type, il suffit de séparer ces variables par des virgules (exemple ici les 3 variables monDoc,feuille,cellule sont déclarées de type object.
Pour utiliser l’adresse sous Windows 8 plutôt que celle sous linux remplacer la variable adresseContratSousLinux par adresseContratSousWindows au niveau de la fonction StarDesktop.loadComponentFromURL. Les différents éléments en paramètres de cette fonction sont : l’adresse du fichier (ici adresseContratSousLinux), le nom de la fenêtre dans laquelle va s’ouvrir le document ("_blank" si on ne réutilise pas le nom de la fenêtre), le numéro du drapeau (0 si on réutilise une fenêtre existante), les différentes options passées en paramètre (ici un tableau vierge), mais par exemple pour ouvrir ce même fichier sans qu’il soit visible nous aurions eu le code ci-dessous éléments changeant en vert :
Sub afficherValFichExist()
dim monDoc,feuille,cellule as object ’indique les variables de type object
dim adresseContratSousLinux,adresseContratSousWindows,nomCellule as string ’variables de type chaîne
’déclare un tableau dont la 1ère valeur à la syntaxe de la structure com.sun.star.beans.PropertyValue
dim tabProp(0) as New com.sun.star.beans.PropertyValue
’adresse pour un ordinateur sous Linux Ubuntu
adresseContratSousLinux = convertToURL("/home/am/contrats/coursIDRAC/MARTINEAU Aurélien.ods")
’adresse pour un ordinateur sous Windows 8
adresseContratSousWindows = convertToURL("C :\Users\am\contrats\coursIDRAC\MARTINEAU Aurélien.ods")
’j’indique le nom de l’option que je modifie ici la propriété de caché qui s’appelle hidden
tabProp(0).Name="Hidden" ’attention la majuscule à Hidden est un impératif
tabProp(0).Value=true ’j’indique la valeur de l’option caché à vrai
’Ouvre le document dont l’adresse est indiquée en paramètre et le stocke dans la variable monDoc
monDoc = StarDesktop.loadComponentFromURL(adresseContratSousLinux, "_blank", 0, tabProp() )
feuille=monDoc.sheets("cours") ’sélectionne la feuille ou se situe les cours
nomCellule="D" & "3" ’indique le nom de la cellule nommée D3 dans la variable nomCellule
cellule=feuille.getCellRangeByName(nomCellule) ’Sélectionne la cellule passée en paramètre
msgbox "La valeur de la cellule : " + cellule.string ’Affiche à l’écran la valeur de la cellule D3
monDoc.close(true)’je ferme le document non visible car je ne peux donc pas cliquer pour le fermer
End Sub
Phase 4 : Parcourir un fichier existant et en fonction de certaines conditions faire tel ou tel chose.
A partir du document que nous avons ouvert précédemment, nous allons recherché les cours enseignés par rapport au mois en cours. Pour cela nous allons parcourir les lignes du fichier une à une à l’aide du boucle for dont la syntaxe générale est la suivante :
FOR nomVar=valeurDebut TO valeurFin ’indication du début de la boucle
’faire les traitements désirés durant la boucle
NEXT ’indication de la fin de la boucle
Puis dans le traitement de la boucle nous allons affichés seulement les lignes de cours dont le mois correspond au mois en cours. Pour effectuer une condition en Basic nous utilisons la syntaxe suivante :
IF condition THEN ’indication du début de la condition à vérifier
’traitement à réaliser si la condition est vraie
ELSE
’traitement à réaliser si la condition est fausse, le sinon(else) n’est pas obligatoire
END IF ’indication de la fin de la condition à vérifier
Ensuite nous afficherons une boite de dialogue à l’écran récapitulant les éléments de chacun des cours pour le mois en cours puis le nombre d’heure de chacun de ces cours, puis le prix de chacun de ces cours et enfin le prix total des cours du mois.
Voici le code ci-dessous correspondant :
Sub lireLesElements
dim monDoc as object
dim adresseContrat,nomFormation,nomMatiere,cel,intituleCours,dateFormation,debFormation,finFormation as string
dim i,j,nbreLignes,nbreCol as integer
dim prixHeureCours,prixDuCours,nbreHeure,prixTotal as double
dim tabProp(0) as New com.sun.star.beans.PropertyValue
nbreLignes=62 ’j’indique qu’il y a 62 lignes à vérifier
adresseContrat = convertToURL("/home/am/contrats/coursIDRAC/MARTINEAU Aurélien.ods")
tabProp(0).Name="Hidden" ’attention la majuscule à Hidden est un impératif
tabProp(0).Value=true ’j’indique la valeur de l’option caché à vrai
monDoc = StarDesktop.loadComponentFromURL(adresseContrat, "_blank", 0, tabProp())
prixTotal=0 ’j’initialise le prix total des cours à 0
For i=2 to nbreLignes ’je parcours chacune des lignes avec la boucle for
’je verifie sil’année en cours et le mois en cours possède une formation
if(year(monDoc.Sheets(0).getCellByPosition(6,i).String)=year(now()) and (month(monDoc.Sheets(0).getCellByPosition(6,i).String)=month(now())) ) then
intituleCours="Réalisation du ou des Cours suivants :" & Chr$(13) & "- Nom de l’enseignant : Aurélien MARTINEAU" ’’j’initialise l’intitulé du cours
’J’INDIQUE LE NOM DE LA MATIERE
cel="B" & i+1 ’Attention dans getCellByPosition nous commençons à 0 pour la ligne 1
’j’indique le nom de la matière dans la variable nomMatiere
nomMatiere=monDoc.Sheets(0).getCellRangeByName(cel).String
’j’ajoute le nom de la matière (avec un saut à la ligne avant(chr(13)) à l’intitulé
intituleCours=intituleCours & Chr$(13) & "-Nom de la matière : " & nomMatiere
cel="D" & i+1 ’j’indique la cellule de la formation
’j’indique le nom de la formation dans la variable nomFormation
nomFormation=monDoc.Sheets(0).getCellRangeByName(cel).String
intituleCours=intituleCours & Chr$(13) & "-Classe concernée : " & nomFormation
’J’INDIQUE LA DATE DE LA FORMATION
cel="G" & i+1 ’j’indique la cellule de la date formation
dateFormation=monDoc.Sheets(0).getCellRangeByName(cel).String ’j’indique la date
intituleCours=intituleCours & Chr$(13) & "-Date d’intervention : " & dateFormation
’J’INDIQUE L’HEURE DE DEBUT DE LA FORMATION
cel="J" & i+1 ’j’indique la cellule du début formation
debFormation=monDoc.Sheets(0).getCellRangeByName(cel).String ’j’indique le début
’J’INDIQUE L’HEURE DE FIN DE LA FORMATION
cel="K" & i+1 ’j’indique la cellule de la fin de formation
finFormation=monDoc.Sheets(0).getCellRangeByName(cel).String ’j’indique la fin
intituleCours=intituleCours & Chr$(13) & "-Heures d’intervention : " & debFormation &" - " &finFormation
’ si le cours est un oral le prix du cours est à divisé par 2
cel="I" & i+1 ’j’indique le type de cellule de l’action de formation (oral ou non)
’je verifie si la cellule de la ligne i est un oral
if monDoc.Sheets(0).getCellRangeByName(cel).String="ORAL" then
prixHeureCours=35 ’si oral J’indique le prix de l’heure de cours est de 35€
else ’sinon
prixHeureCours=70 ’sinon j’indique le prix de l’heure de cours est de 70€
end if
cel="L" & i+1 ’j’indique le type de cellule du nombre d’heures de formation
nbreHeure=monDoc.Sheets(0).getCellRangeByName(cel).value
prixDuCours=prixHeureCours*nbreHeure ’je calcule le prix du cours
’j’ajoute le prix du cours au prix total (contenant les autres cours du mois)
prixTotal=prixTotal+prixDuCours
msgbox intituleCours ’j’affiche les élements concernants le cours enseigné
msgbox "Nombre d’heures : " & nbreHeure ’j’affiche le nombre d’heures de cours
msgbox "Prix du cours : " & prixDuCours & " €" ’j’affiche le prix du cours
end if
next
msgbox "Prix total des cours du mois : " & prixTotal & " €" ’j’affiche le prix total des cours
monDoc.close(true) ’je ferme le document
end sub
Phase 5 : Écrire dans une cellule d’un fichier Calc.
Afin d’écrire dans une cellule d’un fichier calc, si c’est une chaîne de caractère dans la cellule, nous utilisons le nomDeLaCellule.string="La valeur à écrire". Si nous voulons écrire une valeur numérique, nous utilisons nomDeLaCellule.value=valeurNumérique et enfin si nous souhaitons écrire une date ou une formule dans la cellule, nous utilisons cellule.formula pour la formule au format anglais ou cellule.formulaLocal pour la formule au format local, dans notre cas de figure en français. Voici un exemple correspondant ci-dessous :
Voici le code ci-dessous correspondant :
REM ***** ECRIRE DANS DIFFERENTES CELLULES *****
Sub ecrireDansPlusieursCellules
dim monDoc,feuille,cellule as Object ’déclaration des variables de type object
monDoc = ThisComponent ’Sélectionne le document en cours
feuille=Mondoc.sheets.getByName("Feuille1") ’Sélectionne la feuille nommée Feuille1
cellule=feuille.getCellRangeByName("A1") ’Sélectionne la cellule nommée A1
cellule.string="Aurélien Martineau" ’écrit Aurélien MARTINEAU en A1
cellule=feuille.getCellRangeByName("A2") ’Sélectionne la cellule nommée A2
cellule.value=5 ’écrit la valeur 5 en A2
cellule=feuille.getCellRangeByName("A3") ’Sélectionne la cellule nommée A3
cellule.value=12.5 ’remarque la saisie des nombres se fait avec un point comme en anglais
cellule=feuille.getCellRangeByName("A4") ’Sélectionne la cellule nommée A4
cellule.formulaLocal="=somme(A2:A3)" ’indique le résultat du calcul de la somme en A4
cellule=feuille.getCellRangeByName("A5") ’Sélectionne la cellule nommée A5
cellule.formulaLocal="12/05/2016" ’écrit la date 12/05/2016 en A5
End Sub
Phase 6 : Écrire dans un fichier Writer pour créer notre facture.
Jusqu’à présent, nous avons manipuler les macros avec Calc, nous allons maintenant utiliser un modèle de document Writer afin d’effectuer notre facture ainsi que les manipulations que nous avons déjà effectuée dans la phase précédente. Pour cela nous avons nous avons besoin :
- du modèle de document Writer que nous avons besoin d’ouvrir /home/am/factures/modele-Facture.ott
- du document Calc Aurélien Martineau.ods que nous avons utilisé précédemment
- de faire des rechercher/ remplacer avec le texte contenu dans Writer avec l’élément nomDuDocumentWriter.createReplaceDescriptor
- d’ajouter des lignes à un tableau existant dans Writer avec l’élément nomDuTableau.Rows.insertByIndex(1,1)
- de modifier les éléments des lignes du tableau créé avec l’élément nomDuTableau.getCellByPosition(numeroCol,numeroLigne).String="valeur souhaitée"
Voici le code ci-dessous correspondant :
Sub lireLesElementsEtlesRemplirDansWriter
REM DECLARATION DES VARIABLES DONT NOUS AVONS BESOIN
Dim monDocW, monTableauPresta, monTableuTotal,monTexteaRemplacer As Object
Dim FileProperties(0) As New com.sun.star.beans.PropertyValue
Dim adresseMod, adresseDoc As String
dim monDoc as object
dim adresseContrat,nomFormation,nomMatiere,cel,intituleCours,dateFormation,datePremForm, dateDerForm,debFormation,finFormation as string
dim i,j,nbreLignes,nbreCol,numeroLigneCours as integer
dim prixHeureCours,prixDuCours,nbreHeure,prixTotal as double
dim tabProp(0) as New com.sun.star.beans.PropertyValue
dim dateDuJour as Date
’J’ouvre le fichier modèle préparé sous Writer
adresseMod = convertToURL("/home/amartineau/monEtps/TerCompta/Factures/modele-Facture.ott")
monDocW = StarDesktop.loadComponentFromURL(adresseMod, "_blank", 0, Array() )
’je crée l’élément qui permet de remplacer une partie du texte dans Writer
monTexteaRemplacer=monDocW.createReplaceDescriptor
monTexteaRemplacer.searchString="dateFact" ’j’indique le texte à rechercher pour le remplacement
monTexteaRemplacer.replaceString=DATE()’j’indique le texte à utiliser pour le remplacement
monDocW.replaceAll(monTexteaRemplacer)’je lance la fonction pour remplacer le texte
monTexteaRemplacer.searchString="datePena"’j’indique le texte à rechercher pour le remplacement
monTexteaRemplacer.replaceString=DATE()+30’j’indique le texte à utiliser pour le remplacement
monDocW.replaceAll(monTexteaRemplacer)’je lance la fonction pour remplacer le texte
REM PROG DE LECTURE DES ELEMENTS
nbreLignes=62 ’j’indique qu’il y a 62 lignes à vérifier
adresseContrat = convertToURL("/home/amartineau/cours/coursIDRAC/MARTINEAU Aurélien.ods")
tabProp(0).Name="Hidden" ’attention la majuscule à Hidden est un impératif
tabProp(0).Value=true ’j’indique la valeur de l’option caché à vrai
monDoc = StarDesktop.loadComponentFromURL(adresseContrat, "_blank", 0, tabProp())
prixTotal=0
numeroLigneCours=0 ’j’initialise le numéro de ligne à 0
’je defini le tableau sur lequel je vais travailler dans Writer
monTableauPresta=monDocW.TextTables.getByName("tabPrestation")
For i=2 to nbreLignes ’Boucle pour parcourir les différentes lignes du fichier « Aurelien Martineau »
’je verifie si le mois en cours possède une formation
if(year(monDoc.Sheets(0).getCellByPosition(6,i).String)=year(now()) and (month(monDoc.Sheets(0).getCellByPosition(6,i).String)=month(now())) ) then
numeroLigneCours=numeroLigneCours+1 ’on ajoute une nouvelle ligne
intituleCours="Réalisation du ou des Cours suivants :" & Chr$(13) & "- Nom de l ’enseignant : Aurélien MARTINEAU" ’J’INDIQUE LE NOM DE LA MATIERE
cel="B" & i+1 ’j’indique la cellule de la matière
nomMatiere=monDoc.Sheets(0).getCellRangeByName(cel).String ’j’indique la matière
intituleCours=intituleCours & Chr$(13) & "-Nom de la matière : " & nomMatiere
cel="D" & i+1 ’j’indique la cellule de la formation
nomFormation=monDoc.Sheets(0).getCellRangeByName(cel).String ’j’indique la formation
intituleCours=intituleCours & Chr$(13) & "-Classe concernée : " & nomFormation
cel="G" & i+1 ’j’indique la cellule de la date formation
dateFormation=monDoc.Sheets(0).getCellRangeByName(cel).String ’j’indique la date
if numeroLigneCours = 1 Then ’si je suis sur la première ligne du mois de formation
datePremForm=dateFormation ’indique la date de première formation
end if
dateDerForm=dateFormation ’écrase la date de dernière formation par la date actuelle
intituleCours=intituleCours & Chr$(13) & "-Date d’intervention : " & dateFormation
cel="J" & i+1 ’j’indique la cellule du début formation
debFormation=monDoc.Sheets(0).getCellRangeByName(cel).String ’j’indique le debut
cel="K" & i+1 ’j’indique la cellule de la fin de formation
finFormation=monDoc.Sheets(0).getCellRangeByName(cel).String ’j’indique la fin
intituleCours=intituleCours & Chr$(13) & "-Heures d’intervention : " & debFormation &" - " &finFormation
cel="I" & i+1 ’j’indique le type de cellule de l’action de formation
if monDoc.Sheets(0).getCellRangeByName(cel).String="ORAL" then ’ oral
prixHeureCours=35 ’si oral J’indique le prix de l’heure de cours est de 35€
else
prixHeureCours=70 ’sinon j’indique le prix de l’heure de cours est de 70€
end if
cel="L" & i+1 ’j’indique le type de cellule du nombre d’heures de formation
nbreHeure=monDoc.Sheets(0).getCellRangeByName(cel).value
prixDuCours=prixHeureCours*nbreHeure ’je calcule le prix du cours
prixTotal=prixTotal+prixDuCours ’j’ajoute le prix du cours au prix total
monTableauPresta.Rows.insertByIndex(1,1)’j’insere une ligne à mon tableau
’Mise à jour des cellules de la ligne que l’on vient d’ajouter au tableau
monTableauPresta.getCellByPosition(0,numeroLigneCours).String=intituleCours
monTableauPresta.getCellByPosition(1,numeroLigneCours).String=prixHeureCours
monTableauPresta.getCellByPosition(2,numeroLigneCours).String=nbreHeure
monTableauPresta.getCellByPosition(3,numeroLigneCours).String=prixDuCours
monTexteaRemplacer.searchString="dateDeb" ’j’indique le texte à rechercher
monTexteaRemplacer.replaceString=datePremForm ’j’indique le texte de remplacement
monDocW.replaceAll(monTexteaRemplacer) ’je lance le remplacement
monTexteaRemplacer.searchString="dateFin"’j’indique le texte à rechercher
monTexteaRemplacer.replaceString=dateDerForm
monDocW.replaceAll(monTexteaRemplacer)
end if
next ’je passe à la ligne suivante
monDoc.close(true) ’je ferme le document calc
J’indique le nom du tableau total et je l’affecte à la variable monTableuTotal
monTableuTotal=monDocW.TextTables.getByName("tabTotal")
monTableuTotal.getCellByPosition(1,0).String=prixTotal & " €" ’mise à jour de la cellule du tableau
adresseDoc=convertToURL("/home/am/Factures/Facture-201689999.odt") ’adresse de la facture
FileProperties(0).Name = "Overwrite" ’j’indique l’option d’ecraser si le fichier existe
FileProperties(0).Value = True ’je definis la valeur à vrai
monDocW.storeAsURL(adresseDoc, FileProperties()) ’j’enregistre le document
monDocW.close(True) ’je ferme le document
end sub
Conclusion
Au travers de cet article nous avons vu comment manipuler des macros sous Libre Office Calc et créer une facture dans Writer à l’aide de ces mêmes macros.