[Résolu][Writer] Insérer un paragraphe au signet

Discussions et questions sur tout ce qui concerne la programmation tous langages et tous modules confondus.

Modérateur : Vilains modOOs

Règles du forum
:alerte: Balisage obligatoire dans cette section !
Aidez-nous à vous aider au mieux en balisant correctement votre question : reportez-vous sur les règles de cette section avant de poster !
ooSikas
Membre OOrganisé
Membre OOrganisé
Messages : 72
Inscription : 22 juil. 2017 08:33

[Résolu][Writer] Insérer un paragraphe au signet

Message par ooSikas »

Bonjour,

Grâce à l'aide de la communauté de ce forum, j'ai pu parvenir à éditer un devis sous Writer à l'aide d'une source de données sous Calc. (Fichier Modele Writer et Source Calc en PJ)
Malheureusement, je suis confronté à un nouveau problème..

J'arrive a insérer une chaîne de caractère au signet, mais je n'arrive pas à insérer plusieurs chaînes de caractères à la suite au même signet.

Pour donner un exemple concret de mon problème :

Dans le fichier Calc, quand on positionne le curseur sur la ligne commençant avec M.X et que l'on clique sur le bouton Editer le document, on obtient dans le modèle:
Prix de vente : 105,00€

Je souhaiterai ajouter le détail du prix et obtenir :

Prix de vente : 105,00€
SAUT DE LIGNE
OBJET A : [TABULATION] [TABULATION] [TABULATION] 55,00€
RETOUR A LA LIGNE
OBJET B :[TABULATION] [TABULATION] [TABULATION] 50,00€

Pour obtenir ce résultat, je pourrai créer plusieurs signets supplémentaires et les compléter un à un, mais le nombre d'objet étant variable(Objet A, Objet B, Objet C...), cette solution a sa limite.

J'ai aussi pensé a créer une chaîne de caractère regroupant le tout dans Calc et d’insérer directement la chaine de caractère totale sous Writer, mais de la même façon, je suis embêté car le nombre d'objet est variable...

J'ai essayé dans la macro de créer un nouveau signet après chaque appel de la fonction Ecrire_au_signet, mais ça ne fonctionne pas. Le nouveau signet se place juste devant le précédent et j'ai donc mon texte dans l'ordre inverse.

Bref j'ai essayé plusieurs choses.. Mais je ne parviens pas à trouver quelquechose qui fonctionne. Pouvez vous m'aider svp?

De plus, je débute en programmation sous libre office, (surtout Writer) et je ne sais pas connait pas les formules qui me permettent de sauter une ligne ou de créer une tabulation.

Merci d'avance

A+
Vous ne pouvez pas consulter les pièces jointes insérées à ce message.
Dernière modification par ooSikas le 20 janv. 2018 21:18, modifié 1 fois.
LibreOffice Version: 6.4.4.2 sous Windows 10
Avatar de l’utilisateur
Bidouille
RespOOnsable forum
RespOOnsable forum
Messages : 12226
Inscription : 08 nov. 2005 16:23
Localisation : Caen, France

Re: [Writer] Insérer un paragraphe au signet

Message par Bidouille »

Pour être aidé efficacement par les bénévoles et surtout leur faire gagner du temps, veuillez fournir les éléments suivants :
  1. insérer dans le corps du message le code de la macro exposant le problème
  2. joindre un document explicatif intégrant cette macro avec les données de départ (feuille1) et le résultat à obtenir (feuille2)
  3. fournir un mode pas-à-pas permettant de reproduire ce qui a été fait ou ce que vous cherchez à faire pour arriver au problème
  4. ajouter des copies écran (situation avant / après) si cela permet de mieux comprendre
Merci de publier ces informations à la suite.
ooSikas
Membre OOrganisé
Membre OOrganisé
Messages : 72
Inscription : 22 juil. 2017 08:33

Re: [Writer] Insérer un paragraphe au signet

Message par ooSikas »

Entendu Bidouille, je vais essayer de clarifier un peu :

Je met en PJ un pdf avec
1) capture d'écran de ce que je voudrais obtenir a terme
2) Capture d'écran de ce que j’espérai que mon code actuel fasse
3) Capture d'écran de ce que j’obtiens en fait avec mon code.

Je remet en PJ le fichier calc (avec mon code qui ne fonctionne pas) et le modèle.

J'ai conscience que c'est un problème de logique et pas un bug.

Je souhaite utiliser le repère de texte "Prix_vente" et insérer plusieurs info les unes derrières les autres a partir de ce signet. La méthode que j'ai essayé etait de créer un nouveau signet derrière chacune de ces info via macro. Mais le signet ne se place pas du tout ou je le souhaite.

Bout de code concerné :

Code : Tout sélectionner

  EcrireAuSignet(oWriter, "Prix_Vente", sPrix)

'Saut de ligne après signet "Prix_vente"   
   dim dispatcher as object
rem ----------------------------------------------------------------------
rem get access to the document
   document   = oWriter.CurrentController.Frame
   dispatcher = createUnoService("com.sun.star.frame.DispatchHelper")
rem ----------------------------------------------------------------------
   dispatcher.executeDispatch(document, ".uno:InsertPara", "", 0, Array())
   
'Insert un signet après le saut de ligne (Plus tard utilisation d'une boucle for  pour créer un nombre de signet variable) 
  insere_signet(oWriter,"1")
'Ecrire sDetail au nouveau signet  
  EcrireAuSignet(oWriter, "1",sDetail)
Vous ne pouvez pas consulter les pièces jointes insérées à ce message.
LibreOffice Version: 6.4.4.2 sous Windows 10
Avatar de l’utilisateur
Hubert Lambert
SuppOOrter
SuppOOrter
Messages : 1214
Inscription : 06 avr. 2016 07:26

Re: [Writer] Insérer un paragraphe au signet

Message par Hubert Lambert »

Bonjour,

En principe, tu peux utiliser les codes ascii correspondants :

Code : Tout sélectionner

  [...]
  sPrix = oFeuille.getCellRangeByName("L" & lig).String
  col = 12
  lig = lig-1
  sDetail = ""
  detail = oFeuille.getCellByPosition(col, lig).String
  do while detail <> ""
      sDetail = sDetail + string(2, chr(13)) + string(2, chr(9)) + detail
      sDetail = sDetail + string(3, chr(9))
      sDetail = sDetail + oFeuille.getCellByPosition(col+1, lig).String
      col = col+2
      detail = oFeuille.getCellByPosition(col, lig).String
  loop
  sPrix = sPrix + sDetail
  [...]
  EcrireAuSignet(oWriter, "Prix_Vente", sPrix)
Au passage, pourquoi passer par un tableur si tu ne l'utilises même pas pour calculer le prix global ?
Cordialement.
AOOo 4.1.7 sur Win10
AOOo 4.1.x sur Linux Mint
LibreOffice 5.x/6.x sur Linux Mint
--
| « Nos défauts devraient nous donner une qualité : l'indulgence pour les défauts des autres » (Rivarol)
ooSikas
Membre OOrganisé
Membre OOrganisé
Messages : 72
Inscription : 22 juil. 2017 08:33

Re: [Writer] Insérer un paragraphe au signet

Message par ooSikas »

Bonjour,

J'ai pu m'en sortir de cette manière :), tout fonctionne

Pour répondre a ta question, j'utilise un autre fichier ou le tableur est bien nécessaire. Le fichier en pièce jointe est un exemple similaire pour illustrer mon problème

En tout cas merci a toi
LibreOffice Version: 6.4.4.2 sous Windows 10