[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 !
EricMaurice
Fraîchement OOthentifié
Messages : 3
Inscription : 16 avr. 2021 19:39
Localisation : Ramonville Saint Agne (près Toulouse)

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

Message par EricMaurice »

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é 68 fois
Forum-ooo-Calcul-V1.ods
(18.8 Kio) Téléchargé 75 fois
Dernière modification par EricMaurice le 19 avr. 2021 16:06, modifié 1 fois.
Eric Maurice
Open Office 4.1.7 sous OS X 10.14.6
Avatar de l’utilisateur
Bidouille
RespOOnsable forum
RespOOnsable forum
Messages : 12196
Inscription : 08 nov. 2005 17:23
Localisation : Caen, France
Contact :

Re: Export range nommé Calc vers signet Writer

Message par Bidouille »

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
Dolev
InconditiOOnnel
InconditiOOnnel
Messages : 944
Inscription : 19 août 2018 07:20

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

Message par Dolev »

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.15 sous Windows 11
EricMaurice
Fraîchement OOthentifié
Messages : 3
Inscription : 16 avr. 2021 19:39
Localisation : Ramonville Saint Agne (près Toulouse)

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

Message par EricMaurice »

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

		'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
Avatar de l’utilisateur
jeanmi2403
SuppOOrter
SuppOOrter
Messages : 1398
Inscription : 18 janv. 2008 10:02
Localisation : Val de Marne

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

Message par jeanmi2403 »

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.5.9 et AoO 4.1.15 sur Windows 11 & Ubuntu 22.04
LibO 7.6 sur OpenSuse & Linux MX
zeguedon
ManitOOu
ManitOOu
Messages : 3031
Inscription : 02 juil. 2014 19:25

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

Message par zeguedon »

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

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é 65 fois
Comment baliser [Résolu] ?
AOO
LibreOffice
Sous Linux
EricMaurice
Fraîchement OOthentifié
Messages : 3
Inscription : 16 avr. 2021 19:39
Localisation : Ramonville Saint Agne (près Toulouse)

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

Message par EricMaurice »

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

		'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
Verrouillé