Jump to content

Comment insérer un commentaire par programme ?

From The Document Foundation Wiki
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