Aller au contenu principal


L.O Basic : 3 classes importantes

La plupart des objets LibreOffice Basic que j'utilise, dispose des propriétés de débogage dbg_properties et dbg_methods :

dbg_properties liste toutes les propriétés de l'objet ;

dbg_methods liste toutes les méthodes applicables sur l'objet.

Accès à  la documentation officielle.
 

Billet créé le :
01 jan 2022


 


L'image ci-dessus présente, dans deux boites de dialogue (msgBox) les propriétés et méthodes d'un objet de la classe ScTableColumnsObj (les colonnes d'une feuille de calcul) que l'on obtient par une macro-commande semblable à celle-ci :

sub etude()

    Dim leClasseur as object
    Dim laFeuilleActive as object
    Dim lesColonnes as object
   
    leClasseur = thisComponent
    laFeuilleActive = leClasseur.currentController.activeSheet
    lesColonnes = laFeuilleActive.columns
   ' affichage des méthodes de l'objet lesColonnes
        msgBox lesColonnes.dbg_methods
  ' affichage des propriétés de l'objet lesColonnes
        msgBox  lesColonnes.dbg_properties
 
end sub

Une version compactée (et plus efficace) du code :

sub etude()
    Dim crlf as string
    Dim lesColonnes as object
    
    crlf = chr(13) + chr(10) ' retour à la ligne
    lesColonnes = thisComponent.currentController.activeSheet.columns
    with lesColonnes
        msgBox .dbg_methods + crlf + .dbg_properties
    end with
end sub

La documentation officielle disponible ICI montre quelques exemples d'utilisation des propriétés d'un objet de la classe ScTableColumnsObj et des méthodes insertByIndex et removeByIndex.

La classe " ScTableSheetObj" - les feuilles de calcul

L'objet "laFeuilleActive" déclaré dans la macro-commande décrite ci-dessous est une instance de la classe "ScTableSheetObj". Cette macro affiche dans une boite de dialogue :

  • le nom de l'objet "laFeuilleActive" grâce à sa propriété "name" ;

  • la liste de ses  propriétés grâce à sa propriété "dbg_properties" ;

NB : en remplaçant dbg_properties par dbg_methods, les méthodes de l'objet ScTableSheetObj seront listées.

 sub etude()
    Dim laFeuilleActive as object
    Dim crlf as string

    crlf = chr(13) + chr(10)  ' retour à la ligne
    laFeuilleActive = thisComponent.currentController.activeSheet
    with laFeuilleActive
         msgBox "nom de la feuille active : " + .name  + crlf + .dbg_properties
    end with
end sub  
 

  

La classe "ScCellObj" - les cellules

Ci-dessous une macro-commande qui affiche le nom (absolu) d'une cellule ainsi que les propriétés et méthodes d'un objet, instance de la classe ScCellObj (une cellule) en utilisant les propriétés absoluteName, dbg_properties et dbg_methods des objets ScCellObj.

Elle utilise la méthode getCellRangeByName de l'objet feuille de calcul ScTableSheetObj  (cf $ précédent) instancié par le code "thisComponent.currentController.activeSheet" (la feuille active).

sub etude2()
    Dim laCellule as Object
    Dim crlf as string
    
    crlf = chr(13) + chr(10)
    laCellule = thisComponent.currentController.activeSheet.getCellRangeByName("B1")
     with laCellule
              msgBox "cellule : " +  .absoluteName + crlf +.dbg_properties + crlf + .dbg_method
     end with
end sub

 

La classe "ODatabaseForm" - les formulaires

Dans Libre Office, les formulaires (objet ODatabaseForm) sont organisés en collections (objet OFormsCollection) qui peuvent être liées indifféremment à un classeur (calc) ou  à un texte (writer). C'est pourquoi, une entité spéciale, la "couche dessin" (objet ScPageObj) doit être utilisée pour les manipuler.

Une feuille de calcul (objet ScTableSheetObj) dont laFeuilleActive du code ci-après est une instance, dispose de la méthode getDrawPage  (cf. : dbg_methods) qui donne accès à cette "couche dessin" par l'instruction "laCoucheDessin = laFeuilleActive.getDrawpage", raccourcie en laCoucheDession = laFeuilleActive.Drawpage

Par la méthode getForms (cf. image ci-joint) de l'objet laCoucheDessin (objet ScPageObj), nous accédons à la collection des formulaires de la feuille de calcul (objet OFormsCollection). C'est le rôle de l'instruction "laCollectiondesFormulaires = laCoucheDessin.getForms", raccourcie en laCollectionDesFormulaire = laCoucheDessin.Forms.

Enfin par la méthode getByName de cette collection, nous accédons au formulaire "monFormulaire" (objet ODatabaseForm) dessiné sur la feuille active avec l'instruction "leFormulaire = laCollectionDesFormulaires. getByName ("monFormulaire)"

"Cliquer pour agrandir l'image"

La macro-commande ci-dessous, accède au formulaire de la page active pour afficher son nom et ses propriétés.

sub etude() 

  dim leClasseur as object 
  dim laFeuilleActive as object 
  dim laCoucheDessin as object 
  dim laCollectiondesFormulaires as object 
  dim leFormulaire as object 
  dim crlf as string 

leClasseur = thisComponent 
laFeuilleActive = leClasseur.currentController.activeSheet 
rem  ----  1  : instanciation d'un objet ScPageObj 
laCoucheDessin = laFeuilleActive.drawpage 
rem  ----  2  : instanciation d'un objet OFormsCollection 
laCollectiondesFormulaires = laCoucheDessin.Forms 
rem  ----  3  : instanciation d'un objet ODataBaseForms 
leFormulaire = lesFormulaires.getByName("monFormulaire") 

    crlf = chr(13) + chr(10) 
    with leFormulaire 
           msgBox "nom du formulaire : " + .name + crlf + .dbg_properties 
    end with 
 end sub 

La version condensée du code : 
 

dim leFormulaire as object 
dil crlf as string 

    crlf = chr(13) + chr(10) 
   leFormulaire = thisComponent.currentController.activeSheet.Drawpage.Forms.getByName ("monFormulaire")  
    with leFormulaire 
           msgBox "nom du formulaire : " + .name + crlf + .dbg_properties 
    end with 
l   

qui évite la multiplication des déclarations, allège le code et améliore les performances.

Nous aurions utilisé la méthode getByIndex au lieu de getByName si le nom du formulaire n'était pas connu. 
NB : Attention les noms des objets sont sensibles à la casse.

 

L'image ci-dessous montre, pour une feuille de calcul en mode édition, le formulaire (ici nommé "monFormulaire")  de la feuille. Il est visible par un clic droit sur un des boutons du formulaire. L'image montre aussi la boite de dialogue produite par la macro-commande ci-dessus.

Cliquer pour agrandir l'image

La propriété "count" (encadrée dans l'image ci-dessus) d'un formulaire (objet ODatabaseForms) rend le nombre d'éléments composant le formulaire (bouton, case à cocher, zone de texte..). En association avec la méthode getByIndex (disponible également sur ces objets), nous accédons par exemple aux boutons de contrôle du formulaire comme le montre la macro-commande dont le code figure ci-dessous :

sub etude() 
    Dim leFormulaire as Object 
    Dim btn as object 
    Dim msg as string 
    Dim etat as string 
    Dim crlf as string 
    Dim i as integer 
     
    crlf = chr(13) + chr(10) 
    leFormulaire = thisComponent.currentController.activeSheet.Drawpage.Forms.getByName ("monFormulaire") 
    msg ="" 
     with leFormulaire 
          for i = 1  to  .count 
              etat =" : etat " 
              if .getByIndex(i-1).enabled then 
                  etat = etat + "actif" 
                  else 
                  etat = etat + "désactivé" 
              end if 
              msg = msg + " bouton n° " +  i  +  etat +" ; nom : " + .getByIndex(i-1).name + " ;  label : " + .getByIndex(i-1).label  +  chr(13) + chr(10) 
          next i 
      end with 
      msgBox msg 
 end sub

Cliquer pour agrandir l'image

L'image ci-dessus illustre l'exécution de cette macro-commande sur une feuille de calcul contenant un formulaire avec 4 boutons de contrôle.

Une instruction telle que btn0 =  leFormulaire.getByIndex(0)  permet d'accéder aux propriétés et aux méthodes du 1er contrôle du formulaire. Par exemple :

btn0.enabled (encadré 1 de l'image ci-contre) rend true si le contrôle est actif, false sinon ;

btn0.name (encadré 2) rend le nom du contrôle ;

btn0.label (encadré 3) rend le label du contrôle. 
 

Cliquer pour agrandir l'image