L.O Basic : 3 classes importantes

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

  • dbg_properties liste toutes les propriétés de l'objet ;
  • dbg_methods liste toutes les methodes applicables sur l'objet.

Accès à  la documentation officielle :
https://wiki.openoffice.org/wiki/FR/Documentation/BASIC_Guide/UNO_Tools
 


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-contre) 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) rends 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