John-cad Posté(e) le 15 juillet 2016 Posté(e) le 15 juillet 2016 Bonjour à tous Suite à mon dernier post, peux t-on de la même facon que calc sous libre office, écrire depuis Autocad via un lisp dans writer de libre office ? je pense qu'en modifiant légérement les fonctions ci-dessous de vincentp010 (que je remercie d'ailleurs sincérement), on pourrait y arriver, ce code est utilisé pour ouvrir un fichier calc de libre office (defun init-oo (/ oo-des openPar obj feu) (setq oo-app (vlax-create-object "com.sun.star.ServiceManager")) (setq oo-des (vl-catch-all-apply 'vlax-invoke (list oo-app 'createinstance "com.sun.star.frame.Desktop"))) (setq openPar (vlax-make-safearray vlax-vbVariant '(0 . 2))) (setq obj (vlax-invoke-method oo-des 'loadComponentFromURL "private:factory/scalc" "_blank" 0 openPar)) ;liste des feuilles (setq feu (vl-catch-all-apply 'vlax-get (list obj 'sheets))) ;feuille 1 par defaut (setq tro (vlax-invoke feu 'getbyindex 0)) (vl-catch-all-apply 'vlax-invoke (list (vlax-get obj 'CurrentController) 'SetActiveSheet tro)) ) (defun write-cel (name x) (setq cel (vl-catch-all-apply 'vlax-invoke (list tro 'getCellRangeByName name))) (vl-catch-all-apply 'vlax-put (list cel (if (numberp (read x)) 'value 'string) (if (numberp (read x)) (vl-string-subst "," "." x) x) )) ) sachant qu'à l'époque j'avais déjà programmé sous Word un petit truc et j'avais utilisé la commande vlax-dump-objet je crois pour voir les différentes méthodes disponibles pour la mise en pagesi vous avez quelques exemples, je suis preneurle but étant de pouvoir écrire le contenu/index de plusieurs textes sous Autocad dans libre office writer directement Merci par avance pour vos réponsesJohn
John-cad Posté(e) le 18 juillet 2016 Auteur Posté(e) le 18 juillet 2016 Bonjour à tous Patrick si tu me lis, j'ai cherché de mon côté à avancer,j'ai repéré aussi cette discussion pour trouver des solutions lisp pour Word en utilisant ce code, j'arrive à ouvrir un fichier writer vierge (defun init-oo-writer (/ oo-des openPar obj) (setq oo-app (vlax-create-object "com.sun.star.ServiceManager")) (setq oo-des (vl-catch-all-apply 'vlax-invoke (list oo-app 'createinstance "com.sun.star.frame.Desktop"))) (setq openPar (vlax-make-safearray vlax-vbVariant '(0 . 2))) (setq obj (vlax-invoke-method oo-des 'loadComponentFromURL "private:factory/swriter" "_blank" 0 openPar)) ) (init-oo-writer) par contre, je n'arrive pas à trouver le moyen de récupérer le curseur pourécrire les textes qui m’intéressent dans le fichier vierge, ou même la variable du nouveau document afficher à l'écran je n'arrive pas non plus à voir les méthodes associés avec la commande (vlax-dump-object xxx T)si vous avez des idées je suis preneurl'idéal serait les mêmes exemples que dans le post Word et après je me débrouilleMerci par avanceJohn
Patrick_35 Posté(e) le 18 juillet 2016 Posté(e) le 18 juillet 2016 Salut je suis en déplacement cette semaine. Il me sera donc difficile de t'aider.Tu peux déjà voir cette page qui reste à traduire en lisp. @+ Les Lisps de PatrickLe but n'est pas toujours placé pour être atteint, mais pour servir de point de mire.Joseph Joubert, 1754-1824
GEGEMATIC Posté(e) le 19 juillet 2016 Posté(e) le 19 juillet 2016 salut,je vois que tu as déjà pas mal d'outils,à toute fins utiles, voici un article de mon blog, qui date de 2012, où j'avais posté pas mal d'utilitaire pour oOo en lisp.Petits outils pour utiliser Open Office avec AutocadGégé ----------------------------------------------------------------------Site: https://www.g-eaux.frBlog: http://g-eaux.over-blog.com
Patrick_35 Posté(e) le 21 juillet 2016 Posté(e) le 21 juillet 2016 Salut A partir du lien que j'avais donné. (setq oo-app (vlax-create-object "com.sun.star.ServiceManager")) (setq oo-des (vlax-invoke oo-app 'createinstance "com.sun.star.frame.Desktop")) (setq oo-doc (vlax-invoke-method oo-des 'loadComponentFromURL "private:factory/swriter" "_blank" 0 (vlax-make-safearray vlax-vbVariant '(0 . 2)))) Objet Texte du document oOo; Traduction de : Set objText= objDocument.getText (setq oo-txt (vlax-invoke oo-doc 'getText))Objet Curseur Texte du document oOo; Traduction de : Set objCursor= objText.createTextCursor (setq oo-obj (vlax-invoke oo-txt 'createTextCursor))Ecrire la première ligne; Traduction de : objText.insertString objCursor, "The first line in the newly created text document." & vbLf, false (vlax-invoke-method oo-txt 'insertString oo-obj (strcat "The first line in the newly created text document." (chr 10)) :vlax-false)Ecrire la seconde ligne; Traduction de : objText.insertString objCursor, "Now we're in the second line", false (vlax-invoke-method oo-txt 'insertString oo-obj "Now we're in the second line" :vlax-false) @+ Les Lisps de PatrickLe but n'est pas toujours placé pour être atteint, mais pour servir de point de mire.Joseph Joubert, 1754-1824
John-cad Posté(e) le 22 juillet 2016 Auteur Posté(e) le 22 juillet 2016 Bonjour Patrick gegeJ'étais débordé cette semaine Merci pour vos réponses Je regarderai ca avec attention samedi et vous tiens au courant au plus tot John
John-cad Posté(e) le 24 juillet 2016 Auteur Posté(e) le 24 juillet 2016 Bonjour Patrick les trois lignes de ta réponse précédentes m'ont vraiment aidé à avancer sur mon lisple paramètre Chr10 sert pour les sauts de lignes j'ai insérer des sauts de paragraphes avec(vlax-invoke-method oo-txt 'insertControlCharacter oo-obj 0 :vlax-false)qui permet de conserver les propriétés d'un paragraphe sans modifier tout le documentj'arrive à écrire ce que je veux dans mon fichier writer de libre office mais la mise en forme est à revoir je n'ai pas par exemple trouver le moyen de modifier le style de texte, la taille du texte, la couleur du texteet de pouvoir insérer un tableau par exemple de 4 lignes et de 4 colonnes pour la couleur, j'ai essayé cela sans succés(vlax-invoke-method oo-txt 'setPropertyValue oo-obj "CharColor" "255") pour le tableau, sans succès non plus(setq oo-tabl (vlax-invoke oo-doc 'createInstance( "com.sun.star.text.TextTable"))) (vlax-invoke-method oo-tabl 'initialize 4, 4) (vlax-invoke-method oo-txt 'insertTextContent oo-obj, oo-tabl :vlax-false) j'ai essayé de prendre exemples sur ton code lisp mais rien n'y fait, avec ou sans virgule....Merci encore de ton aideJohn
John-cad Posté(e) le 24 juillet 2016 Auteur Posté(e) le 24 juillet 2016 Bonjour Patrick les trois lignes de ta réponse précédentes m'ont vraiment aidé à avancer sur mon lisple paramètre Chr10 sert pour les sauts de lignes j'ai insérer des sauts de paragraphes avec(vlax-invoke-method oo-txt 'insertControlCharacter oo-obj 0 :vlax-false)qui permet de conserver les propriétés d'un paragraphe sans modifier tout le documentj'arrive à écrire ce que je veux dans mon fichier writer de libre office mais la mise en forme est à revoir je n'ai pas par exemple trouver le moyen de modifier le style de texte, la taille du texte, la couleur du texteet de pouvoir insérer un tableau par exemple de 4 lignes et de 4 colonnes pour la couleur, j'ai essayé cela sans succés(vlax-invoke-method oo-txt 'setPropertyValue oo-obj "CharColor" "255") pour le tableau, sans succès non plus(setq oo-tabl (vlax-invoke oo-doc 'createInstance( "com.sun.star.text.TextTable"))) (vlax-invoke-method oo-tabl 'initialize 4, 4) (vlax-invoke-method oo-txt 'insertTextContent oo-obj, oo-tabl :vlax-false) j'ai essayé de prendre exemples sur ton code lisp mais rien n'y fait, avec ou sans virgule....Merci encore de ton aideJohn
John-cad Posté(e) le 24 juillet 2016 Auteur Posté(e) le 24 juillet 2016 il fautdrait aussi si possible trouver le moyen d'ouvrir un fichier modèle au démarrage du lisp,je sais écrire quelques lignes lisp mais là ca dépasse vraiment mes compétencesmerciJohn
John-cad Posté(e) le 24 juillet 2016 Auteur Posté(e) le 24 juillet 2016 petite avancée microbienne, en recherchant un peu sur le net pour le style du cursor, il doit falloir utiliser quelque chose du style ;; pour la taille du texte (vlax-invoke-method oo-txt 'setPropertyValue oo-obj CharHeight "14") ;; pour le style de texte (vlax-invoke-method oo-txt 'setPropertyValue oo-obj CharFontName "Arial") ;; pour l'alignement du texte (vlax-invoke-method oo-txt 'setPropertyValue oo-obj Alignment "Right") ;; pour la couleur du texte (vlax-invoke-method oo-txt 'setPropertyValue oo-obj CharColor "1") si vous avez des idées, merciJohn
Patrick_35 Posté(e) le 25 juillet 2016 Posté(e) le 25 juillet 2016 Salut Pour ce qui est du type, de la taille ou de la couleur du texte, cela a été relativement facile de mettre la main dessus. Changer la police de caractères en Arial(vlax-put oo-obj 'CharFontName "Arial") Changer la couleur du texte en rouge(vlax-put oo-obj 'CharColor 16724787) Récupérer la couleur du texte sélectionné(vlax-get oo-obj 'CharColor) Changer la taille du texte en 14(vlax-put oo-obj 'CharHeight 14) Par contre, pour un tableau, cela semble être plus compliqué. Je continue de chercher. @+ Les Lisps de PatrickLe but n'est pas toujours placé pour être atteint, mais pour servir de point de mire.Joseph Joubert, 1754-1824
John-cad Posté(e) le 25 juillet 2016 Auteur Posté(e) le 25 juillet 2016 Merci Patrick pour ces quelques lignes, qui changent la vie et évite de tout se taper à la main comme avantn'aurais tu pas par hasard aussi la commande pour l'alignement gauche droite ou centré ?et le tableau, je vais essayer de mon côté aussi merci encorejohn
Patrick_35 Posté(e) le 25 juillet 2016 Posté(e) le 25 juillet 2016 Voilà pour le tableau.J'ai pas les yeux en face des trous ce matin car je m'acharnais sur une erreur. Le tout est de trouver Pour le tableau ; Création du tableau (setq oo-tbl (vlax-invoke oo-doc 'createinstance "com.sun.star.text.TextTable")) (vlax-invoke-method oo-tbl 'initialize 4 4) ; 4 Lignes et 4 Colonnes (vlax-invoke-method oo-txt 'insertTextContent oo-obj oo-tbl :vlax-false) ; Pour écrire TEST A1 dans la 1er cellule (setq oo-cel (vlax-invoke oo-tbl 'getCellByPosition 0 0)) ; Ligne 1, Colonne 1 ou A1 (setq oo-cel-txt (vlax-invoke oo-cel 'getText)) (setq oo-cel-obj (vlax-invoke oo-cel-txt 'createTextCursor)) (vlax-invoke oo-cel-txt 'insertString oo-cel-obj "TEST A1" :vlax-false) Je vais déjeuner et je regarde pour les alignements. Un Lien à regarder. @+ Les Lisps de PatrickLe but n'est pas toujours placé pour être atteint, mais pour servir de point de mire.Joseph Joubert, 1754-1824
Patrick_35 Posté(e) le 25 juillet 2016 Posté(e) le 25 juillet 2016 Ce que j'ai pu trouver ; Alignement (vlax-put oo-obj 'paraAdjust 0) ; Gauche (vlax-put oo-obj 'paraAdjust 1) ; Droite (vlax-put oo-obj 'paraAdjust 2) ; Paragraphe (vlax-put oo-obj 'paraAdjust 3) ; Millieu (vlax-put oo-obj 'CharPosture 0) ; Ecriture normal (vlax-put oo-obj 'CharPosture 1) ; Ecriture italique (vlax-put oo-obj 'CharUnderline 0) ; Ne pas sousligner (vlax-put oo-obj 'CharUnderline 1) ; Souligner (vlax-put oo-obj 'CharWeight 0) ; Ne plus être en gras (vlax-put oo-obj 'CharWeight 150) ; Gras (de 111 à 200) (vlax-put oo-obj 'CharBackcolor 16000) ; Couleur fond du texte @+ Les Lisps de PatrickLe but n'est pas toujours placé pour être atteint, mais pour servir de point de mire.Joseph Joubert, 1754-1824
John-cad Posté(e) le 27 juillet 2016 Auteur Posté(e) le 27 juillet 2016 Merci Patrick pour ton aide précieuseje vais pouvoir finaliser mon lisp avec la mise en page automatiqueJohn
Patrick_35 Posté(e) le 27 juillet 2016 Posté(e) le 27 juillet 2016 Salut J'ai continué de chercher un peu, notamment pour dimensionner le tableau; Pour modifier les bords gauche et droite (vlax-put oo-tbl 'HoriOrient 0) (vlax-put oo-tbl 'RightMargin 2000) (vlax-put oo-tbl 'LeftMargin 2000) ;Pour modifier la largeur de la 1er et 2em colonne (setq oo-sep (vlax-get oo-tbl 'TableColumnSeparators)) (vlax-put (nth 0 oo-sep) 'Position 2000) (vlax-put (nth 1 oo-sep) 'Position 4000) (vlax-put oo-tbl 'TableColumnSeparators oo-sep) @+ Les Lisps de PatrickLe but n'est pas toujours placé pour être atteint, mais pour servir de point de mire.Joseph Joubert, 1754-1824
John-cad Posté(e) le 7 août 2016 Auteur Posté(e) le 7 août 2016 SalutMerci Patrick pour ces réponsesj'ai mis du temps à répondre car j'étais débordé ces derniers joursj'ai terminé mon lisp de création de rapport automatique, tout marche nickel et la mise en page se fait toute seuleil me manque juste de pouvoir insérer une en-tête et un pied de page ou sinon d'ouvrir à l'ouverture de swriter un document type extension .ott John
John-cad Posté(e) le 7 août 2016 Auteur Posté(e) le 7 août 2016 Salut Patrickj'ai essayé de remplacer dans la fonction le terme _blank par le chemin de mon modèle.ott mais rien n'y fait (defun init-oo-writer (/ oo-des openPar) (setq oo-app (vlax-create-object "com.sun.star.ServiceManager")) (setq oo-des (vlax-invoke oo-app 'createinstance "com.sun.star.frame.Desktop")) (setq oo-doc (vlax-invoke-method oo-des 'loadComponentFromURL "private:factory/swriter" "C:\\Users\\Utilisateur\\Desktop\\modele.ott" 0 (vlax-make-safearray vlax-vbVariant '(0 . 2)))) ) si vous avez des idéesMerciJohn
Patrick_35 Posté(e) le 8 août 2016 Posté(e) le 8 août 2016 Salut Une fonction reprise depuis Api_xls;------------------------------------------------------------------- ; ; Convertir une chaine de caractères de type UTF-8 ; Convert a string to UTF-8 ; ; Exemple ; (decodeurl "c:\\Donn%C3%A9es") --> "c:\\Données" ; ;------------------------------------------------------------------- (defun decodeurl(str / hex new pos txt hexdec) (defun hexdec (nb / r i s) (if (= (type nb) 'INT) (setq nb (itoa nb)) ) (setq r 0 i 0) (while (and (= (type nb) 'STR) (< i (strlen nb))) (setq i (1+ i) s (strcase (substr nb i 1 )) r (+ (lsh r 4) (- (ascii s) (if (<= s "9") 48 55))) ) ) ) (while (setq pos (vl-string-search "%" str)) (setq hex (substr str (+ pos 2) 2)) (and (eq (substr str (+ pos 4) 1) "%") (setq hex (strcat hex (substr str (+ pos 5) 2))) ) (setq txt (strcat (substr str 1 pos) (if (eq (strlen hex) 4) (chr (- 50322 (hexdec hex))) (chr (hexdec hex)) ) ) ) (if (eq (strlen hex) 4) (setq str (substr str (+ pos 7))) (setq str (substr str (+ pos 4))) ) (if new (setq new (strcat new txt)) (setq new txt) ) ) (if new (strcat new str) str ) ) Pour ouvrir un document .odt(setq fil (getfiled "Veuillez sélectionner un fichier LibreOffice Writer" (getvar "dwgprefix") "odt" 16)) (setq oo-app (vlax-create-object "com.sun.star.ServiceManager")) (setq oo-des (vlax-invoke oo-app 'createinstance "com.sun.star.frame.Desktop")) (setq oo-doc (vlax-invoke-method oo-des 'loadComponentFromURL (decodeurl (strcat "file:///" (vl-string-translate "\\" "/" fil))) "_blank" 0 (vlax-make-safearray vlax-vbVariant '(0 . 0)))) @+ Les Lisps de PatrickLe but n'est pas toujours placé pour être atteint, mais pour servir de point de mire.Joseph Joubert, 1754-1824
Patrick_35 Posté(e) le 8 août 2016 Posté(e) le 8 août 2016 J'ai continué mes recherches Insérer un entête(setq oo-sty (vlax-invoke (vlax-get oo-doc 'StyleFamilies) 'getByName "PageStyles")) (setq oo-pge (vlax-invoke oo-sty 'getByName (vlax-get oo-obj 'PageStyleName))) (vlax-put oo-pge 'HeaderIsOn :vlax-true) (setq oo-txt (vlax-get oo-pge 'HeaderText)) (setq oo-cur (vlax-invoke oo-txt 'createTextCursor)) (vlax-put oo-cur 'paraAdjust 3) (vlax-invoke oo-txt 'insertString oo-cur "Mon_Texte" :vlax-false) Insérer un pied de page(setq oo-sty (vlax-invoke (vlax-get oo-doc 'StyleFamilies) 'getByName "PageStyles")) (setq oo-pge (vlax-invoke oo-sty 'getByName (vlax-get oo-obj 'PageStyleName))) (vlax-put oo-pge 'FooterIsOn :vlax-true) (setq oo-txt (vlax-get oo-pge 'FooterText)) (setq oo-cur (vlax-invoke oo-txt 'createTextCursor)) (vlax-put oo-cur 'paraAdjust 1) (vlax-invoke oo-txt 'insertString oo-cur "Page 1/1" :vlax-false) @+ Les Lisps de PatrickLe but n'est pas toujours placé pour être atteint, mais pour servir de point de mire.Joseph Joubert, 1754-1824
John-cad Posté(e) le 8 août 2016 Auteur Posté(e) le 8 août 2016 Bonjour Patrick et vraiment un grand merci pour ton aide sur ce postje n'y serai pas arrivé pas sinon, j'ai vu le jour je préconise l'utilisation de modèle writer avec extension ott car si l'utilisateur enregistre par mégarde le document odtau lieu de faire enregistrer sous, le modèle est foutuj'ai réajusté avec (defun init-oo-writer-carrez (/ oo-des openPar) (setq oo-app (vlax-create-object "com.sun.star.ServiceManager")) (setq oo-des (vlax-invoke oo-app 'createinstance "com.sun.star.frame.Desktop")) (setq oo-doc (vlax-invoke-method oo-des 'loadComponentFromURL (decodeurl (strcat "file:///" (vl-string-translate "\\" "/" "C:\\TMP\\modele.ott"))) "_blank" 0 (vlax-make-safearray vlax-vbVariant '(0 . 0)))) ) tout marche nickelles deux commandes marchent très bien pour l'entête et le pied de page pour une ligne uniquementmais quand on a différentes lignes à insérer, c'est vite le souk dans le fichier odt Merci encoreon peut clôturer ce postThanks higher Patrick and see you soonJohn
Patrick_35 Posté(e) le 9 août 2016 Posté(e) le 9 août 2016 Salut les deux commandes marchent très bien pour l'entête et le pied de page pour une ligne uniquementun exemple pour un entête sur deux lignesInsérer un entête sur deux lignes (setq oo-sty (vlax-invoke (vlax-get oo-doc 'StyleFamilies) 'getByName "PageStyles")) (setq oo-pge (vlax-invoke oo-sty 'getByName (vlax-get oo-obj 'PageStyleName))) (vlax-put oo-pge 'HeaderIsOn :vlax-true) (vlax-put oo-pge 'HeaderBodyDistance 1000) (vlax-put oo-pge 'HeaderHeight 2500) (setq oo-txt (vlax-get oo-pge 'HeaderText)) (setq oo-cur (vlax-invoke oo-txt 'createTextCursor)) (vlax-put oo-cur 'paraAdjust 3) (vlax-invoke oo-txt 'insertString oo-cur (strcat "Mon_Texte 1" (chr 10) "Mon_texte 2") :vlax-false) @+ Les Lisps de PatrickLe but n'est pas toujours placé pour être atteint, mais pour servir de point de mire.Joseph Joubert, 1754-1824
Messages recommandés
Créer un compte ou se connecter pour commenter
Vous devez être membre afin de pouvoir déposer un commentaire
Créer un compte
Créez un compte sur notre communauté. C’est facile !
Créer un nouveau compteSe connecter
Vous avez déjà un compte ? Connectez-vous ici.
Connectez-vous maintenant