IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

OpenOffice & LibreOffice Discussion :

Problème d'insertion de champs user-defined [OpenOffice][Tableur]


Sujet :

OpenOffice & LibreOffice

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Octobre 2007
    Messages
    25
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2007
    Messages : 25
    Points : 40
    Points
    40
    Par défaut Problème d'insertion de champs user-defined
    Bonjour.

    Voilà mon problème : à l'aide d'une macro, je dois créer un tableau qui contient des champs user-defined dans un document de type writer.
    En ce qui concerne la création du tableau, je dirais que je n'ai presque pas de problème (un petit soucis pour récupérer un tableau déjà existant, mais c'est secondaire )

    Là où j'ai vraiment un problème, c'est pour remplir le contenu d'une cellule avec un élément user-defined.
    Tant qu'il s'agit d'insérer du texte dans la cellule, le modifier, pas de problème, j'utilise pour ça le code suivant :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    ' index : numéro de la colonne
    ' tab_suivi : référence vers le tableau que j'ai construit
    sub setColValue(index as integer, libelle as string, value as string)
    	dim cell as object
            ' on récupère la référence vers la cellule
     	cell = tab_suivi.getCellByPosition(index,0)
            ' version insertion de texte, qui fonctionne nickel
    	cell.string = "#value#"   ' mais  ça ne convient pas :/
            ' comment faire pour insérer un champs user-defined 
            ' ayant  l'atttribut name à "libelle" 
            ' et la valeur à "value"  dans la cellule cell ? 
            insert_controled_field(libelle,value)  'ne fonctionne pas !! cf code macro plus bas...
    end sub
    Mais impossible d'insérer un champs user-defined.

    Je cherche a obtenir ça dans le XML du fichier content.xml de mon document final :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
                      <table:table-cell table:style-name="table_2_.A1" office:value-type="string">
                         <text:p text:style-name="Table_20_Heading">
                            <text:user-field-get text:name="libelle">#value#</text:user-field-get>
                         </text:p>
                      </table:table-cell>
    Auparavant, j'utilisais une macro pour insérer ces types de champs dans mon document. Un clic sur un bouton d'une boite de dialogue insérait le champs à l'emplacement du curseur visible dans le document.
    Voici le code de cette macro, qui n'est pas de moi :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    sub insert_controled_field(nom as string,value as string)
    	dim document as object
    	dim dispatcher as object
    	dim args2(5) as new com.sun.star.beans.PropertyValue
    	args2(0).Name = "Type"
    	args2(0).Value = 20
    	args2(1).Name = "SubType"
    	args2(1).Value = 1
    	args2(2).Name = "Name"
    	args2(2).Value = nom
    	args2(3).Name = "Content"
    	args2(3).Value = value
    	args2(4).Name = "Format"
    	args2(4).Value = -1
    	args2(5).Name = "Separator"
    	args2(5).Value = " "
    	document  = ThisComponent.CurrentController.Frame
    	dispatcher = createUnoService("com.sun.star.frame.DispatchHelper")
    	dispatcher.executeDispatch(document, ".uno:InsertField", "", 0, args2())
    end sub
    Il semblerait que cette macro se base sur le curseur visible du document, et insère le champs user-defined. Du coup, ça ne fonctionne pas pour insérer dans ma cellule cell du premier script.
    et je ne sais pas comment déplacer le curseur dans ma cellule.

    Je ne sais pas si mon approche est la bonne, mais toute aide, suggestion seront les bienvenues.

    Merci d'avance à ceux qui pourront m'aider.

  2. #2
    Membre du Club
    Profil pro
    Inscrit en
    Octobre 2007
    Messages
    25
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2007
    Messages : 25
    Points : 40
    Points
    40
    Par défaut
    Bon, et bien j'ai trouvé la réponse tout seul comme un grand

    Quelques explications qu'en même, qui pourront servir à certains je pense...

    D'abord, il est effectivement nécessaire de déplacer le curseur visible pour une insertion correcte des champs user-defined dans les cellules du tableau (via la sub insert_controled_field(nom,valeur) )
    L'astuce est de déplacer le curseur visible vers une curseur d'écriture qu'on ouvre pour chaque cellule :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    sub setColValue(index as integer, libelle as string, value as string)
      dim cell as object
      ' on récupère la référence vers la cellule
      cell = tab_suivi.getCellByPosition(index,0)
      ' référence vers le curseur visible
      CV = thisComponent.CurrentController.ViewCursor
      ' création d'un curseur d'écriture dans la cellule
      CE = cell.createTextCursor
      ' déplacement du curseur visible sur le curseur d'écriture
      CV.gotoRange(CE,false)
      '  appel de la sub d'insertion du champ user-defined
      insert_controled_field(libelle,value)  ' fonctione !!
    end sub
    Et là.. ça ne fonctionait toujours pas !!

    Et j'ai compris pourquoi
    Dans la sub d'insertiton de champs, on utilise un dispatcher
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    document  = ThisComponent.CurrentController.Frame
    dispatcher = createUnoService("com.sun.star.frame.DispatchHelper")
    dispatcher.executeDispatch(document, ".uno:InsertField", "", 0, args2())
    Je n'ai pas trouvé d'explications claires et précises sur ce point, mais de toute évidence, si on appelle cette sub à partir d'une boite de dialogue Modale, le dispatcher n'est pas exécuté.
    Du coup, j'ai simplement retardé l'appel à cette sub à après la fermeture de ma boite de dialogue, et le tour est joué

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [MySQL] Problème d'insertion de champs par requête
    Par lpldtrllt dans le forum PHP & Base de données
    Réponses: 12
    Dernier message: 20/05/2009, 18h20
  2. Problème insertion nouveau champs dans table
    Par antoine1504 dans le forum Requêtes et SQL.
    Réponses: 2
    Dernier message: 04/07/2007, 13h00
  3. [SQL] Problème d'insertion du à un champ auto_increment ?
    Par toma03 dans le forum PHP & Base de données
    Réponses: 5
    Dernier message: 11/06/2007, 17h29
  4. Réponses: 4
    Dernier message: 21/05/2007, 19h20
  5. Problème d'insertion avec un champ Date/Heure ?
    Par bds2006 dans le forum Bases de données
    Réponses: 1
    Dernier message: 26/06/2006, 11h37

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo