Comment insérer un commentaire par programme ?

    From The Document Foundation Wiki
    < Macros‎ | Writer
    This page is a translated version of the page Macros/Writer/001 and the translation is 94% complete.


    Description

    On souhaite gérer par programme l'insertion de commentaire (par exemple pour y indiquer l'Auteur et/ou la Date du commentaire).

    Nous utilisons pour cela le service com.sun.star.text.XTextViewCursor[1] et com.sun.star.text.textfield.Annotation services[2] et une structure com.sun.star.util.DateTime[3] pour définir précisément la date et heure voulue pour le commentaire.

    Code

    La procédure suivante pourrait par exemple être associée à un raccourci-clavier. Elle insère à la position courante du curseur un nouveau commentaire.

    Option Explicit
    
    Sub InsertComment
        '''Insérer un commentaire où se trouve le curseur'''
    
        Dim oCurs As Object ' com.sun.star.text.text.XTextViewCursor
        Dim oAnnot As Object ' com.sun.star.text.textfield.Annotation
        Dim oDateTime As New com.sun.star.util.DateTime
    
        oCurs = ThisComponent.CurrentController.getViewCursor()
        oAnnot = ThisComponent.createInstance( _
            "com.sun.star.text.textfield.Annotation")
    
        With oDateTime ' com.sun.star.util.DateTime
            .Minutes = 20
            .Hours = 12
            .Day = 20
            .Month = 12
            .Year = 2012
        End With
       
        With oAnnot ' com.sun.star.text.textfield.Annotation
            .Author = "Auteur du commentaire"
            .Content = "Texte du commentaire"
            .DateTimeValue = oDateTime
        End With
    
        oAnnot.attach(oCurs.Start) ' Insérer au début du curseur
    
    End Sub ' InsertComment

    En utilisant Python:

    # -*- coding: utf-8 -*-
    from __future__ import unicode_literals
    
    import uno
    
    def InsertComment():
        """Insérer un commentaire où se trouve le curseur
        
        curs    com.sun.star.text.text.XTextViewCursor
        annot   com.sun.star.text.textfield.Annotation
        """
        dt = uno.createUnoStruct("com.sun.star.util.DateTime")
    
        thisComponent = XSCRIPTCONTEXT.getDocument()
        curs = thisComponent.CurrentController.getViewCursor()
        annot = thisComponent.createInstance(
            "com.sun.star.text.textfield.Annotation")
    
        dt.Minutes = 20
        dt.Hours = 12
        dt.Day = 20
        dt.Month = 12
        dt.Year = 2012
    
        annot.Author = "Auteur du commentaire"
        annot.Content = 'Texte du commentaire'
        annot.DateTimeValue = dt
    
        annot.attach(curs.Start)  # Insérer au début du curseur

    Le calcul de l'horodatage n'est pas effectué dans ces exemples.

    Notes