| |
Publicado em outubro, 18 2017 - 9:52 AM |
Bonjour,
J ai un champ RTF permettant de mettre en forme mon texte (gras, tabulations, ....
J'ai besoin de l'inclure mis en forme dans libreoffice ou word. Pour le moment j'utilise le composant livre pour faire du rechercher remplacer mais il me converti tout en teste sans garder la mise en forme. Avez vous une idéé de comment faore cela ?
Je suis en WD 17. |
| |
| |
| | | |
|
| | |
| |
Publicado em outubro, 18 2017 - 11:09 AM |
bonjour
je suis en windev 21
j'ai pas de souci avec libre office
je passe par une copie dans le presse papier
VersPressePapierRTF(Texte_RTF)
puis une rechercher puis coller
au debut je faisais cela en ole mais j’étais obligé d'ouvrir et fermer le document a chaque remplace
après j'ai récupéré une classe word et open office ( idem que libbre office ) livrer avec une lst |
| |
| |
| | | |
|
| | |
| |
Publicado em outubro, 18 2017 - 11:23 AM |
Merci pour la proposition. Je passe aussi par le composant venant d'une LST pour piloter Office ou Libreoffice/OpenOffice.
Il me manquais la fonction VersPressePapierRTF(Texte_RTF) que je ne connaissais pas.
Je teste cela immédiatement
|
| |
| |
| | | |
|
| | |
| |
Publicado em outubro, 18 2017 - 11:46 AM |
en utilisant le composant si on a le meme
VersPressePapierRTF(rtf) copie dans la presse papier
gpclEditeur:Rechercher("#dossier#") recherche dans le document #dossier# gpclEditeur:Coller( ) coller le presse papier |
| |
| |
| | | |
|
| | |
| |
Publicado em outubro, 18 2017 - 2:38 PM |
Merci pour l'explication ..... MAIS
Eh oui il y a toujours un mais :
Voici mon code :
gpclEditeur:Rechercher("@STATUTESPECE@") HLitRecherchePremier(espèce,IDespèce,COMBO_Espèce..ValeurMémorisée) VersPressePapierRTF(espèce.Texte_RTF) gpclEditeur:Coller()
Donc j'utilise bien le même composant que toi. J'ai bien la sélection de mon texte @STATUTESPECE@ mais pas le collage espéré. Le texte sélectionné reste en surbrillance uniquement.
J'ai tenté de mettre ma recherche dans le fichier de donnée avant mais ca ne change rien.
Une idée ? |
| |
| |
| | | |
|
| | |
| |
Publicado em outubro, 18 2017 - 5:44 PM |
bonjour,
que recupere tu en faisant info(espèce.Texte_RTF) ou trace
ou alors mettre un champs rtf dans une fenetre
HLitRecherchePremier(espèce,IDespèce,COMBO_Espèce..ValeurMémorisée) monchampsrtf=espèce.Texte_RTF
ensuite je mets dans l'ordre ( cela a peut etre de l'importance question de temps de collage dans le presse papier) vers presse papier rechercher coller
autrement question bete le document est ouvert |
| |
| |
| | | |
|
| | |
| |
Publicado em outubro, 18 2017 - 7:59 PM |
Merci de t'occuper de mon cas. Effectivement, mon problème est bien lié aux données. Via WDMAP, je n'ai que le formatage dans mon champ RTF sans mention des lignes marquées.
Je fais un simple ecranversfichier() Hajoute(espece)
C'est la première fois que je joue avec le RTF donc je ne fais peut être pas la bonne manip.
Le trace ou le débogage pas a pas me donne aussi que le formatage : {\rtf1\ansi\ansicpg1252\deff0\deflang1036{\fonttbl{\f0\fswiss\fprq2\fcharset0 Verdana;}} {\*\generator Msftedit 5.41.21.2510;}\viewkind4\uc1\pard\f0\fs17\par
Mon champ fait 800 caractères donc ce ne doit pas être un problème de longueur.... |
| |
| |
| | | |
|
| | |
| |
Publicado em outubro, 18 2017 - 10:14 PM |
peux tu me donner la structure de ton champs
j'ai pas mon programme sous les yeux suis chez moi
je travaille pas ecranversfichier()
j'ai un arbre de decision avec des champs rtf je remplace des choses dans le champs rtf par des valeurs sql
et apres j'envoie cela sur libre office
je te tiens au courant demain
il faudrait voir l'enregistrement dans la table
a faire un champs dans une fenetre et voir le rtf apres le HLitRecherchePremier
prefere faire un htrouve mais vieux developpeur
HLitRecherchePremier(espèce,IDespèce,COMBO_Espèce..ValeurMémorisée) monchampsrtf=espèce.Texte_RTF |
| |
| |
| | | |
|
| | |
| |
Publicado em outubro, 24 2017 - 8:02 AM |
Bonjour Serge, Désolé de ce silence. J'ai été bloqué par d'autres projets. Il semble en effet que ce soit ma rubruqye qui pose souci. Lorsque je rappelle le contenu de ma rubrique dans un champ RTF, rien n'apparait. Peux tu me dire comment tu affecte le contenu d'un champ RTF à un enregistrement et comment tu le récupère ? MErci d'avance. |
| |
| |
| | | |
|
| | |
| |
Publicado em outubro, 24 2017 - 11:59 AM |
il me semblait que tu faisais HLitRecherchePremier(espèce,IDespèce,COMBO_Espèce..ValeurMémorisée)
monchampsrtf=espèce.Texte_RTF
deja moi je ferais un test avec htrouve
je traite en sql par select
apres j’exécute ma requete
je rempli mon champs rtf par le resultat de ma requete
FEN_test.Texte_RTF4=sdrequete.lib3
lib3 est un champs memo de ma table
Texte_RTF4 est un champs de saisie style rtf
après tu peux le récupérer avec les sequences hlit htrouve |
| |
| |
| | | |
|
| | |
|
| |
Publicado em outubro, 25 2017 - 11:25 AM |
faire un info pour voir si tu recupere bien quelque chose autrement il va coller du vide
dans ma procedure je lance
gpclEditeur = cEditeur.EditeurInstance()
apres j'ouvre le document
sDocument = chemin du document libre office
SI gpclEditeur:Ouvrir(sDocument) = Faux ALORS Erreur("L'ouverture du document a échoué.") FIN
puis
VersPressePapierRTF(rtf) copie dans la presse papier du champs memode la table
info(rtf) pour voir ce que tu recupere gpclEditeur:Rechercher("#dossier#") recherche dans le document #dossier# gpclEditeur:Coller( ) coller le presse papier
la fin du traitement LanceAppliAssociée(sDocument ) Multitâche(120) a voir le timing mais sans multitache cela marche pas nh est un entier système =0 nh=SysFenHandle(sdocumentfinal+" - LibreOffice Writer") SysDonneFocus(nh) SysFenAffiche(nh,sfaMaximise) |
| |
| |
| | | |
|
| | |
| |
Publicado em outubro, 25 2017 - 3:24 PM |
J'ouvre mon document depuis le début de la procédure puisque j'utilise déjà dans le document plusieurs gpclEditeur:RechercherRemplacer
Ceux-ci fonctionnent correctement.
Voici mon code à la fin qui ne fonctionne pas :
gpclEditeur:Rechercher("@STATUT@") HLitRecherchePremier(espèce.IDespèce,COMBO_Espèce) Trace (espèce.Texte) bTest est un booléen=VersPressePapierRTF(espèce.Texte) Trace(bTest) gpclEditeur:Coller()
Du coup je récupère bien le contenu de ma rubrique dans le premier TRACE. Mon booléen de test me retourne bien VRAI donc ma valeur est récupérée dans le presse papier. Le texte est sélectionné mais c'est comme si la fonction coller ne s'éxécutait pas...
Mystère.
Je vais tenter de contourner mon problème mais c'est vrai que je ne comprends pas le pourquoi du comment et je continuerai à chercher. |
| |
| |
| | | |
|
| | |
| |
Publicado em outubro, 25 2017 - 4:31 PM |
tu fais bien cela
pclEditeur = cEditeur.EditeurInstance()
apres j'ouvre le document
sDocument = chemin du document libre office
SI gpclEditeur:Ouvrir(sDocument) = Faux ALORS Erreur("L'ouverture du document a échoué.") FIN
tu choisi bien open office moi je me sers que de libre office donc j'ai // sur le cas 2 pclEditeur = allouer un cOpenOfficeWriter
PROCEDURE GLOBALE EditeurInstance()
// Variable locale pclEditeur est un cEditeur dynamique = Null
// Les deux installés ? //Si cOpenOfficeWriter.Disponible() ET cMicrosoftWord.Disponible() ALORS //1 : OpenOffice Writer //2 : Microsoft Word // SELON Dialogue("Souhaitez-vous utiliser OpenOffice Writer ou Microsoft Word ?") // OpenOffice Writer //CAS 1 pclEditeur = allouer un cOpenOfficeWriter // Microsoft Word // CAS 2 // pclEditeur = allouer un cMicrosoftWord // FIN RENVOYER pclEditeur //FIN
la classe de coller tu peux faire un test pour voir si tu passe dedans en mettant un info("toto")
// Variable
tabMNoArgs est un tableau de Variant
oDispatchHelper est un objet OLE dynamique = m_oApplication>>createInstance("com.sun.star.frame.DispatchHelper") oFrame est un objet OLE dynamique = m_oDocument>>getCurrentController()>>getFrame()
// Collage par le dispatcher oDispatchHelper>>executeDispatch(oFrame, ".uno:Paste", "", 0, tabMNoArgs)
// Libération libérer oDispatchHelper libérer oFrame |
| |
| |
| | | |
|
| | |
| |
Publicado em outubro, 25 2017 - 5:28 PM |
gpclEditeur:Rechercher("@STATUT@") HLitRecherchePremier(espèce.IDespèce,COMBO_Espèce) Trace (espèce.Texte) bTest est un booléen=VersPressePapierRTF(espèce.Texte) Trace(bTest) gpclEditeur:Coller()
apres tu ouvre un doc et puis un coller on verra ce qu'il y a dans le presse papier |
| |
| |
| | | |
|
| | |
| |
Publicado em outubro, 26 2017 - 7:48 AM |
MEA MAXIMA CULPA !!!!
L'erreur venait de moi, ton code fonctionne à merveille. Afin de ne pas risquer que mes utilisateurs détruisent mes modèles, je mets tous mes fichiers de texte en lecture seule à l'ouverture de l'application.
Or, si les fonctions gpclEditeur:RechercherRemplacer modifient le texte même dans un doc en lecture seule, la fonction gpclEditeur:Coller ne le fait pas.
J'ai uniquement retiré la lecture seule en début de procédure et tout fonctionne comme voulu. Encore merci pour l'aide et le temps consacré à ma demande |
| |
| |
| | | |
|
| | |
| |
Publicado em outubro, 26 2017 - 9:10 AM |
cool
bon dev
|
| |
| |
| | | |
|
| | |
| |
Membro registado 962 mensagems Popularité : +183 (185 votes) |
|
Publicado em outubro, 26 2017 - 10:30 AM |
hello, voici une fonction qui permet d'insérer du RTF dans Writer à partir d'un champ RTF de windev : syntaxe :
Procedure OOInsereRTF(MonChampRTF,MonDocumentWriter est une chaîne,MonSignet est une chaîne) MonChampRTF est le champ RTF à copier MonDocumentWriter est le document à mettre à jour. MonSignet est le nom du repère de texte à mettre dans Writer à l'endroit où l'on veut insérer le texte.
exemple d'appel :
VersPressePapierRTF(Texte_RTF) OOInsereRTF(Texte_RTF,"f:\temp\LibreOffice\TestRtf.odt","PointDinsertion")
procédure OOInsereRTF :
Procedure OOInsereRTF(MonChampRTF,MonDocumentWriter est une chaîne,MonSignet est une chaîne)
LOCAL PathURL est une chaîne oSM est un objet automation dynamique oDesktop est un objet automation dynamique oCRef est un objet automation dynamique oDocument est un objet automation dynamique oFrame est un objet automation dynamique oDispatcher est un objet automation dynamique oViewCursor est un objet automation dynamique oBookmark est un objet automation dynamique arg_LdDoc est un tableau de 1 objet automation dynamique arg_MyProps est un tableau de 0 objet automation dynamique vdl est un entier
SI fFichierExiste(MonDocumentWriter) ALORS QUAND EXCEPTIONEXCEPTION DANS oSM = ObjetActif("com.sun.star.ServiceManager") SI oSM = Null ALORS oSM = allouer un objet automation("com.sun.star.ServiceManager") oDesktop = oSM>>createInstance("com.sun.star.frame.Desktop") oDispatcher = oSM>>createInstance("com.sun.star.frame.DispatchHelper") oCRef = oSM>>createInstance("com.sun.star.reflection.CoreReflection") FAIRE FinProgramme("LibreOffice n'est pas installé sur votre poste.") FIN arg_LdDoc[1] = OOValeurNommée(oSM,oCRef,"Hidden",False) oDocument = oDesktop>>LoadComponentFromURL( OOFichier(MonDocumentWriter), "_blank", 0, arg_LdDoc) oFrame = oDocument>>getCurrentController()>>getFrame() SI oDocument<>Null ALORS oDocument>>updateLinks oViewCursor = oDocument>>CurrentController>>getviewCursor() oBookmark = oDocument>>Bookmarks>>getByName(MonSignet)>>Anchor oViewCursor>>gotorange(oBookmark, False) oDispatcher>>executeDispatch(oFrame, ".uno:Paste", "", 0, arg_MyProps) oDocument>>Close(Vrai) SINON Erreur("Document non ouvert") FIN oDesktop>>Terminate() Libérer oSM FIN CAS EXCEPTION: Erreur("Exception LibreOffice : ", ExceptionInfo()) oDesktop>>Terminate() Libérer oSM
Procédure ooFichier :
Procedure OOFichier(Fichier est une chaîne) RENVOYER "file:///"+Remplace(Fichier,"\","/")
Procédure OOValeurNommée :
Procedure OOValeurNommée(oSM est un objet automation dynamique, oCRef est un objet automation dynamique, cName est une chaîne, uvalue est un Variant) PropertyValue est un objet automation dynamique
oCRef>>forName("com.sun.star.beans.PropertyValue")>>createObject(PropertyValue) PropertyValue>>Name = cName PropertyValue>>Value = uvalue RENVOYER PropertyValue
et voilà le résultat :
-- Ami calmant, J.P |
| |
| |
| | | |
|
| | |