[Résolu][Calc] Export plage nommée vers signet Writer
Modérateur : Vilains modOOs
Règles du forum
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 !
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 !
-
- 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
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
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
Open Office 4.1.7 sous OS X 10.14.6
- Bidouille
- RespOOnsable forum
- Messages : 12196
- Inscription : 08 nov. 2005 17:23
- Localisation : Caen, France
- Contact :
Re: Export range nommé Calc vers signet Writer
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.
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.
Re: [Calc] Export range nommé vers signet Writer
Bonjour
Peux-tu expliquer pourquoi tu ne passes pas par du publipostage ?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,
Open Office 4.1.15 sous Windows 11
-
- 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
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
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)
Eric Maurice
Open Office 4.1.7 sous OS X 10.14.6
Open Office 4.1.7 sous OS X 10.14.6
- jeanmi2403
- SuppOOrter
- Messages : 1398
- Inscription : 18 janv. 2008 10:02
- Localisation : Val de Marne
Re: [Calc] Export range nommé vers signet Writer
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 +
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
LibO 7.5.9 et AoO 4.1.15 sur Windows 11 & Ubuntu 22.04
LibO 7.6 sur OpenSuse & Linux MX
Re: [Calc] Export range nommé vers signet Writer
Bonjour,
Est-ce que tu peux tester cette façon. Elle insert le tableau Calc en tant qu'objet dans Writer :
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
-
- 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
Magnifique @zeguedon !
Merci beaucoup pour le coup de pouce.
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 :
Merci beaucoup pour le coup de pouce.
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
Open Office 4.1.7 sous OS X 10.14.6