Comment convertir un tableau en texte ?

From The Document Foundation Wiki
< Macros‎ | Writer
Jump to: navigation, search
This page is a translated version of the page Macros/Writer/008 and the translation is 100% complete.

Other languages:
English • ‎français

Description

On souhaite reproduire par programme la fonctionnalité du menu Tableau ▸ Convertir ▸ Tableau en texte.

Nous utilisons ici le dispatcher pour lancer la commande .uno:ConvertTableToText (cette partie du code peut être enregistrée si l'option Outils ▸ Options ▸ Avancé ▸ Activer l'enregistreur de macros est activée).

Le programme doit commencer par positionner le curseur dans le tableau à convertir ce qui se fera par exemple avec la méthode Select du CurrentController en lui passant un curseur créé sur le tableau.

L'exemple ci-dessous convertit un tableau nommé "Tableau2".

L'accès au tableau se fait via la méthode getByName du service TextTables. La méthode com.sun.star.text.createCursorByCellName[1] permet de créer un curseur sur la cellule A1. C'est ce curseur qui est utilisé pour sélectionner le tableau qui peut alors être converti.

Code

En LibreOffice Basic:

Option Explicit

Sub Main()
    TableToText("Table2")
End Sub


Sub TableToText(TableName As String)
    '''Convertir un tableau en texte'''

    Dim oDoc As Object ' com.sun.star.uno.XInterface (ThisComponent)
    Dim oTable As Object ' com.sun.star.text.XTextTable
    Dim oTableCursor As Object ' com.sun.star.text.XTextTableCursor
    Dim document As Object ' com.sun.star.frame.XFrame (ThisComponent.CurrentController.Frame)
    Dim dispatcher As Object ' com.sun.star.frame.DispatchHelper
    Dim args(0) As New com.sun.star.beans.PropertyValue

    oDoc = ThisComponent
    oTable = oDoc.TextTables.getByName(TableName)
    oTableCursor = oTable.createCursorByCellName("A1")
    oDoc.CurrentController.select(oTableCursor)

    document = ThisComponent.CurrentController.Frame
    dispatcher = createUnoService("com.sun.star.frame.DispatchHelper")

    args(0).Name = "Delimiter"
    args(0).Value = CHR$(9)

    dispatcher.executeDispatch(document, ".uno:ConvertTableToText", "", 0, args())

End Sub ' TableToText

Fichier ODT pour tester la macro

Notes