[Résolu][Calc] Export plage nommée vers signet Writer

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 !

[Résolu][Calc] Export plage nommée vers signet Writer

Messagepar EricMaurice » 16 Avr 2021 20:46

Bonjour
et merci d'avance pour vos réponses

la macro que je développe copie des tableaux Calc, chacun dans une feuille, chacun identifié par un Nom, dans un document Writer, à l'emplacement désigné par un repère de texte, un repère de texte par tableau.
La macro boucle sur un index qui sert à définir les noms de la feuille, du nom du range, et de la référence de texte.
En m'inspirant des exemples et conseils de ce forum, je suis arrivé à résoudre la sélection du range tableau, puis de la référence texte, mais je bute toujours sur le moyen de copier/coller l'un vers l'autre. Je ne comprends pas la subtilité de l'usage de insertTextContent dans le cas d'un autre objet que du texte qu'il devrait traiter si mes lectures sont justes.
Où est l'astuce ?

Vous trouverez ci-joint les deux fichiers concernés, ils doivent être dans le même répertoire :
- le document Calc qui contient les tableaux sources et la macro
- le modèle Writer qui sert au document de rapport

C'est mon premier post, merci de votre indulgence et de vos conseils éclairés
Pièces jointes
Forum-ooo-Rapport-V1.ott
(13.09 Kio) Téléchargé 12 fois
Forum-ooo-Calcul-V1.ods
(18.8 Kio) Téléchargé 20 fois
Dernière édition par EricMaurice le 19 Avr 2021 15:06, édité 1 fois.
Eric Maurice
Open Office 4.1.7 sous OS X 10.14.6
EricMaurice
Fraîchement OOthentifié
 
Message(s) : 3
Inscrit le : 16 Avr 2021 18:39
Localisation : Ramonville Saint Agne (près Toulouse)

Re: Export range nommé Calc vers signet Writer

Messagepar Bidouille » 16 Avr 2021 20:57

Bonsoir,

Fil logiquement déplacé dans la section Macros et titre adapté (cf. bandeau rouge en haut de la page).
Merci de poster au bon endroit la prochaine fois.
Avatar de l’utilisateur
Bidouille
RespOOnsable forum
RespOOnsable forum
 
Message(s) : 10663
Inscrit le : 08 Nov 2005 17:23
Localisation : Brest, France

Re: [Calc] Export range nommé vers signet Writer

Messagepar Dolev » 17 Avr 2021 16:25

Bonjour

EricMaurice a écrit:copie des tableaux Calc, chacun dans une feuille, chacun identifié par un Nom, dans un document Writer, à l'emplacement désigné par un repère de texte,

Peux-tu expliquer pourquoi tu ne passes pas par du publipostage ?
Open Office 4.1.10 sous Windows 10 pro
Avatar de l’utilisateur
Dolev
Membre cOOnfirmé
Membre cOOnfirmé
 
Message(s) : 250
Inscrit le : 19 Août 2018 06:20

Re: [Calc] Export range nommé vers signet Writer

Messagepar EricMaurice » 18 Avr 2021 13:14

Bonjour @Bolev
et merci pour ta question

Je ne suis pas arrivé à publier des tableaux entiers, sans a priori sur les dimensions, et pour chaque cellule cela nécessite de refaire la mise en forme sous Writer (d'après mes essais) alors que c'est déjà réalisé par une dizaine de formats conditionnels sous Calc.
C'est bien plus simple de le faire sous Calc et de bâtir le rapport par le copier/coller vers Writer, par tableau entier.
Mais je suis d'accord, cela s'en rapproche énormément dans le concept.

J'ai le sentiment que mon erreur vient d'une mauvaise identification des propriétés de l'objet source, et très certainement d'une fonction pas adaptée ...
La fonction InsertTextContent plante toujours (voir image jointe) ... totalement hermétique pour moi ... je cherche toujours dans la doc oOo.

Voici la partie intéressante du code
Code : Tout sélectionner   AgrandirRéduire
      'Copie depuis le document de calcul
      'Construction du nom de la feuille de calcul
      sFeuille="Synthèse" & oNumTab
      'Construction du nom de la zone de cellule
      sNoms="TabSynthèse" & oNumtab
      ' Adressage de la feuille puis de la plage de cellules par son nom
      oCopieFeuille= oDocCalc.Sheets.getByName(sFeuille) ' Nom de la feuille à copier
      oPlage = oCopieFeuille.getCellRangeByName(sNoms) ' La plage à copier

      'Ecriture dans le document rapport
      'On recompose le nom de la référence Texte dans Writer et on y accède
      sSignet="Tableau" & oNumTab
      oSignet = oDocRapport.Bookmarks.getByName(sSignet)
      oTexte = oSignet.Anchor.Text
      oCurseur = oTexte.createTextCursorByRange(oSignet.Anchor.Start)
      
      'On insert le tableau copié
      oTexte.insertTextContent( oCurseur, oPlage, false)   
Pièces jointes
Capture d’écran 2021-04-18 à 14.09.37.jpg
Eric Maurice
Open Office 4.1.7 sous OS X 10.14.6
EricMaurice
Fraîchement OOthentifié
 
Message(s) : 3
Inscrit le : 16 Avr 2021 18:39
Localisation : Ramonville Saint Agne (près Toulouse)

Re: [Calc] Export range nommé vers signet Writer

Messagepar jeanmi2403 » 18 Avr 2021 16:33

Bonsoir,
La traduction Googlesque du message est "impossible de forcer le type d'argument lors d'un appel de corrélation ".
En gros, je pense que ça signifie, qu'il ne sait pas trop quel type donner à l'objet à insérer, ou comment le transformer en quelque chose d'utilisable.
La méthode insertTextContent ne s'attend peut-être pas à recevoir une plage de cellules ?
Ne peux-tu pas utiliser simplement la fonction uno:paste au curseur ?
A +
Jean-Michel
LibO 7.0.5 et AoO 4.1.10 sur Windows 10 x64 & Ubuntu 20.04
LibO 7.1.0.3 sur OpenSuse & Linux MX
Avatar de l’utilisateur
jeanmi2403
InconditiOOnnel
InconditiOOnnel
 
Message(s) : 857
Inscrit le : 18 Jan 2008 10:02
Localisation : Sucy en Brie

Re: [Calc] Export range nommé vers signet Writer

Messagepar zeguedon » 18 Avr 2021 17:33

Bonjour,

Est-ce que tu peux tester cette façon. Elle insert le tableau Calc en tant qu'objet dans Writer :
Code : Tout sélectionner   AgrandirRéduire
for oNumTab = 1 to iNbTab

      'Copie depuis le document de calcul
      'Construction du nom de la feuille de calcul
      sFeuille="Synthèse" & oNumTab
      'Construction du nom de la zone de cellule
      sNoms="TabSynthèse" & oNumtab
      ' Adressage de la feuille puis de la plage de cellules par son nom
      oCopieFeuille= oDocCalc.Sheets.getByName(sFeuille) ' Nom de la feuille à copier
      oPlage = oCopieFeuille.getCellRangeByName(sNoms) ' La plage à copier
      oDocCalc.CurrentController.Select(oPlage)
      aCopier = oDocCalc.CurrentController.GetTransferable
      'Ecriture dans le document rapport
      'On recompose le nom de la référence Texte dans Writer et on y accède
      sSignet="Tableau" & oNumTab
      oSignet = oDocRapport.Bookmarks.getByName(sSignet)
      oTexte = oSignet.Anchor.Text
      oCurseur = oTexte.createTextCursorByRange(oSignet.Anchor.Start)
      oDocRapport.CurrentController.Select(oCurseur)
      oDocRapport.CurrentController.InsertTransferable(aCopier)
   next oNumTab
Pièces jointes
Z1_Forum-ooo-Calcul-V1.ods
(17.83 Kio) Téléchargé 8 fois
Comment baliser [Résolu] ?
AOO 4.1.7
LibreOffice 6.4.7.2
Sous Linux & Windows 10
zeguedon
ManitOOu
ManitOOu
 
Message(s) : 2697
Inscrit le : 02 Juil 2014 18:25

Re: [Calc] Export range nommé vers signet Writer

Messagepar EricMaurice » 19 Avr 2021 15:04

Magnifique @zeguedon !
Merci beaucoup pour le coup de pouce. :bravo:

L'insertion du tableau se faisant en début de ligne, j'ai juste eu a ajouter le déplacement de curseur à la fin et c'était joué.
Pour info le code déjà donné ci-dessus, mais complété et fonctionnel :
Code : Tout sélectionner   AgrandirRéduire
      'Copie depuis le document de calcul
      'Construction du nom de la feuille de calcul
      sFeuille="Synthèse" & oNumTab
      'Construction du nom de la zone de cellule
      sNoms="TabSynthèse" & oNumtab
      ' Adressage de la feuille puis de la plage de cellules par son nom
      oCopieFeuille= oDocCalc.Sheets.getByName(sFeuille) ' Nom de la feuille à copier
      oPlage = oCopieFeuille.getCellRangeByName(sNoms) ' La plage à copier
      oDocCalc.CurrentController.Select(oPlage)
      aCopier = oDocCalc.CurrentController.GetTransferable
     
      'Ecriture dans le document rapport
      'On recompose le nom de la référence Texte dans Writer et on y accède
      sSignet="Tableau" & oNumTab
      oSignet = oDocRapport.Bookmarks.getByName(sSignet)
      oTexte = oSignet.Anchor.Text
      oCurseur = oTexte.createTextCursorByRange(oSignet.Anchor.Start)
      oCurseur.gotoRange(oCurseur.End, True)                     ' Déplacement à la fin de la sélection
      oDocRapport.CurrentController.Select(oCurseur)
      
      'On insert le tableau copié
      oDocRapport.CurrentController.InsertTransferable(aCopier)
Eric Maurice
Open Office 4.1.7 sous OS X 10.14.6
EricMaurice
Fraîchement OOthentifié
 
Message(s) : 3
Inscrit le : 16 Avr 2021 18:39
Localisation : Ramonville Saint Agne (près Toulouse)


Retour vers Macros et API

Qui est en ligne ?

Utilisateur(s) parcourant ce forum : Aucun utilisateur inscrit et 7 invité(s)