John-cad Posté(e) le 10 juillet 2016 Posté(e) le 10 juillet 2016 Bonjour à tousExiste t-il des commandes lisp pour écrire ou lire dans un fichier calc de libre office ?J'ai pas mal de routines lisp pour exporter des infos (textes, polylignes,blocs avec attributs) dAutocad vers Excel grâce aux nombreuses fonctions de gile et Patrick Excel devenue disponible seulement à la location annuel ou mensuel, c'est vraiment du vol sérieux je veux passer toutes mes commandes lisp d'Excel à calc de libre office 5Existe t-il donc des fonctions comme openexcel, putcell ou encore getcell pour me permettre de modifier mes lisps et migrer tout vers calc libre office? Merci par avance de votre aide John
(gile) Posté(e) le 10 juillet 2016 Posté(e) le 10 juillet 2016 Salut, Il me semble que Patrick_35 avait fait quelque chose avec Open Office (vu l'historique de Libre Office, ça devrait être assez semblable), mais je ne retrouve pas... Personnellement, à moins d'utiliser des spécificités du tableur (formules, cellules nommées), pour accéder seulement aux rangées et colonnes d'un tableau, j'ai toujours eu tendance à conseiller d'utiliser plutôt les fichiers CSV plus faciles à manipuler et compatibles avec tous les tableurs. Gilles Chanteau - gileCAD - GitHub Développements sur mesure pour AutoCAD
vincentp010 Posté(e) le 11 juillet 2016 Posté(e) le 11 juillet 2016 Salut, j'ai ces fonctions dans mes cartons: (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) )) ) Ça s'utilise comme ça:(init-oo) (write-cel "A1" "POINT") (write-cel "B1" "ABSCISSE") (write-cel "C1" "ORDONNEE") (vlax-release-object oo-app) Aide au téléchargement du cadastre dgfip-download-helper Insertion de photos géolocalisées exif https://www.dropbox.com/s/gkf6o9ac2hxen97/exifscr.zip?dl=0 Script correction BUG SPDC V2, propriétaire département 21 et 22 : https://greasyfork.org/scripts/442400-spdcv2/code/SPDCV2.user.js
Patrick_35 Posté(e) le 11 juillet 2016 Posté(e) le 11 juillet 2016 Salut J'ai fait une bibliothèque de fonctions qui fonctionnent aussi bien avec Excel, qu'avec OpenOffice (et logiquement avec LibreOffice). @+ Les Lisps de PatrickLe but n'est pas toujours placé pour être atteint, mais pour servir de point de mire.Joseph Joubert, 1754-1824
lecrabe Posté(e) le 11 juillet 2016 Posté(e) le 11 juillet 2016 Hello (write-cel "A1" "Merci Super_VincentP010 & Super_Patrick_35") Bye, lecrabe Autodesk Expert Elite Team
Steven Posté(e) le 11 juillet 2016 Posté(e) le 11 juillet 2016 Salut J'ai fait une bibliothèque de fonctions qui fonctionnent aussi bien avec Excel, qu'avec OpenOffice (et logiquement avec LibreOffice). @+ Salut Patrick_35, Comment fait-on pour utiliser le lisp, une fois qu'on l'a chargé? Steven________________________________________ Pour le taf; Windows (et ses emmerdes) sinon pas d'AutoCAD. Pour le perso Linux Mint et pas de problèmes. Mais pas d'AutoCAD. En rêve; AutoCAD sous Linux.
Patrick_35 Posté(e) le 11 juillet 2016 Posté(e) le 11 juillet 2016 Salut Patrick_35, Comment fait-on pour utiliser le lisp, une fois qu'on l'a chargé?Regarde le lisp En tête, tu as toutes les fonctions et ensuite, chaque fonction est décrite avec les arguments et les retours.Un exemple qui lance Excel et s'il ne le trouve pas, OpenOffice.(or (setq Mon_Appli (lancer_excel)) (setq Mon_Appli (lancer_ooo))) Ensuite, les fonctions sont les mêmes pour Excel ou OpenOffice. Un exemple pour ouvrir un fichier.(setq Mon_Classeur (ouvrir_fichier Mon_Appli "c:\\Données\\Test.xls")) J'avais aussi regardé pour travailler avec SQL, mais le temps m'a manqué et je suis passé à autre chose. @+ 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 11 juillet 2016 Auteur Posté(e) le 11 juillet 2016 Bonjour à tousMerci pour vos réponsesj'ai pu arriver à mes fins avec ce petit lisp (defun c:exp2 (/ pol lst1 i d pt) (vl-load-com) (init-oo) (write-cel "A1" "Numéro") (write-cel "B1" "X") (write-cel "C1" "Y") (write-cel "D1" "Z") (setq pol (car (entsel "\nSélectionner la polyligne 3D à exporter les sommets : "))) (setq lst1 (alrpolyt pol)) (setq i 0) (setq d 1) (repeat (length lst1) (setq pt (nth i lst1)) (write-cel(strcat "A" (rtos (1+ d) 2 0)) (rtos (1+ i) 2 0)) (write-cel (strcat "B" (rtos (1+ d) 2 0)) (rtos (car pt) 2 6)) (write-cel (strcat "C" (rtos (1+ d) 2 0)) (rtos (cadr pt) 2 6)) (write-cel (strcat "D" (rtos (1+ d) 2 0)) (rtos (caddr pt) 2 6)) (setq d (1+ d)) (setq i (1+ i)) ) (vlax-release-object oo-app) (prin1) ) la function alrpolyt (defun alrpolyt (npoly / lst_pl entpoly te coor1 x y z ptx) (setq lst_pl nil) (setq entpoly (entget npoly)) (setq te (cdr (assoc 0 entpoly))) (setq npoly (entnext npoly)) (while (/= te "SEQEND") (setq entpoly (entget npoly)) (setq coor1 (cdr (assoc 10 entpoly))) (setq x (car coor1)) (setq y (cadr coor1)) (setq z (caddr coor1)) (setq ptx (list x y z)) (setq lst_pl (cons ptx lst_pl)) (setq npoly (entnext npoly)) (setq entpoly (entget npoly)) (setq te (cdr (assoc 0 entpoly))) ) (if lst_pl (setq lst_pl (reverse lst_pl))) ) je m'en sers pas mal et ca va certainement servir Patrick j'ai essayé tes fonctions mais pas moyen de les faire marcherDernière question vincentp010, n'aurais tu pas par hasard une fonction cette fois ci pour lire une cellule dans un fichier calc de libre officeMerci par avance à vous tousJohn
Patrick_35 Posté(e) le 12 juillet 2016 Posté(e) le 12 juillet 2016 Salut Par exemple(setq Mon_Appli (lancer_ooo)) ; Se connecter à OpenOffice (setq Mon_Classeur (ouvrir_fichier Mon_Appli "C:\\Test\\Test.xlsm")) ; Ouvrir le Fichier (setq Ma_feuille (car (liste_feuilles Mon_Classeur))) ; Choix de la feuille ou (setq Ma_Feuille "Feuil1") si on connait le nom (lire_cellule Mon_Classeur Ma_Feuille "A1") ; Lire la cellule A1 ou (ecrire_cellule Mon_Classeur Ma_Feuille "A1" "Test") ; Ecrire dans la cellule A1 (sauver_fichier Mon_Classeur) ; Sauvegarder le fichier au besoin (fermer_fichier Mon_Classeur) ; Fermer OpenOffice (fermer_appli (list Mon_Appli Mon_Classeur)) ; Nettoyer la mémoire ps : Testé avec LibreOffice @+ Les Lisps de PatrickLe but n'est pas toujours placé pour être atteint, mais pour servir de point de mire.Joseph Joubert, 1754-1824
Steven Posté(e) le 12 juillet 2016 Posté(e) le 12 juillet 2016 Regarde le lisp En tête, tu as toutes les fonctions et ensuite, chaque fonction est décrite avec les arguments et les retours.Un exemple qui lance Excel et s'il ne le trouve pas, OpenOffice.(or (setq Mon_Appli (lancer_excel)) (setq Mon_Appli (lancer_ooo))) Ensuite, les fonctions sont les mêmes pour Excel ou OpenOffice. Un exemple pour ouvrir un fichier.(setq Mon_Classeur (ouvrir_fichier Mon_Appli "c:\\Données\\Test.xls")) J'avais aussi regardé pour travailler avec SQL, mais le temps m'a manqué et je suis passé à autre chose. @+ Sur ce coup-là, je suis un peu neuneu, j'arrive à rien :huh: Steven________________________________________ Pour le taf; Windows (et ses emmerdes) sinon pas d'AutoCAD. Pour le perso Linux Mint et pas de problèmes. Mais pas d'AutoCAD. En rêve; AutoCAD sous Linux.
Patrick_35 Posté(e) le 12 juillet 2016 Posté(e) le 12 juillet 2016 Sur ce coup-là, je suis un peu neuneu, j'arrive à rien :huh:Et avec l'exemple donné #9 ? @+ Les Lisps de PatrickLe but n'est pas toujours placé pour être atteint, mais pour servir de point de mire.Joseph Joubert, 1754-1824
Steven Posté(e) le 12 juillet 2016 Posté(e) le 12 juillet 2016 Et avec l'exemple donné #9 ? @+ Quand je charge le lisp, j'ai ça: Commande: ; erreur: fonction incorrecte: #<VLA-OBJECT 000000004868ad88> Steven________________________________________ Pour le taf; Windows (et ses emmerdes) sinon pas d'AutoCAD. Pour le perso Linux Mint et pas de problèmes. Mais pas d'AutoCAD. En rêve; AutoCAD sous Linux.
Patrick_35 Posté(e) le 12 juillet 2016 Posté(e) le 12 juillet 2016 Ce n'est pas normal.Comme il n'y a que des fonctions, le chargement du lisp ne peut pas provoquer ce type d'erreur.Au lancement d'une fonction, c'est possible, mais pas au chargement.Zip tronqué au téléchargement ? Je le remet à dispo @+Api_xls.lsp 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 13 juillet 2016 Auteur Posté(e) le 13 juillet 2016 Bonjour à tousJe confirme avec les fonctions de Patrick ca marche nickelCeci étant dit, pour écrire sous libre office writer depuis autocad on ne peut pas utiliser les mêmes fonctions J'ai des quantités de rapport bien structuré à faire depuis autocad et je voudrais les rédiger par lisp avec writer plutôt que Word et ces bandits de Microsoft avec leurs licences mensuelles et abonnement c'est vraiment une escroquerie Word et Excel payant par mois Il serait peut-être judicieux de clôturer ce post et en ouvrir un autre ?Non ?Merci par avance de vos retoursJohn
Patrick_35 Posté(e) le 13 juillet 2016 Posté(e) le 13 juillet 2016 Salut Je pense aussi qu'il serait mieux de lancer un nouveau sujet, mais trouver des fonctions pour Word risque d'être beaucoup plus difficile qu'avec Excel ou son petit frère avec OpenOffice. Je pourrais t'indiquer comment faire et la logique, mais il faut aussi un bon bagage en programmation. @+ 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 15 juillet 2016 Auteur Posté(e) le 15 juillet 2016 Bonjour Patrick Oui on fera un nouveau sujet avec libre office et writerje termine mes fonctions export vers libre office et je m'en occupeMerci encore pour votre aideJohn
John-cad Posté(e) le 15 juillet 2016 Auteur Posté(e) le 15 juillet 2016 Patrick plus j'approfondi et plus les deux fonctions nouveau_fichier et ouvrir_fichier me posent problèmesj'ai fais plusieurs tests avec libre office calc et Autocad 2013si le fichier existe avec extension ods, pas de problème le fichier s'ouvre en lançant depuis autocadmais on ne peut pas faire de nouveau fichier sans en préciser le nom ca me pose problème car dans un dessin, j'aurai par exemple plusieurs exports de polylignes et pas en même temps,si par mégarde, je laisse le fichier export de la 1ere polyligne ouvert, il ne veut pas m'en ouvrir un second alors qu'avec les fonctions de vincento10, je n'ai pas ce problème et utiliser plusieurs fois successivement, le lisp crée plusieurs fichiers sansnom1, sansnom2, ...sansnom10 et ca marche nickel du coup, j'ai l'impression qu'avec ta fonction nouveau_fichier et la présence de Hidden dans cet fonction, le lisp tourne mais n'affiche rien à l'écran et buge quand on veut créer un nouveau fichier odsdans mon cas, les fonctions de vincentp010 sont plus simples à utiliser par contre, il manque une fonction essentielle de vincentp10, celle de lire une celluleet là je vais utiliser tes fonctions qui sont quand même assez complètes. On peut clore ce sujet.Merci à tous de vos réponses
John-cad Posté(e) le 4 décembre 2016 Auteur Posté(e) le 4 décembre 2016 Bonjour à tous le lisp en réponse du 12 juillet 2016 ne marche plus avec acd2013 et libre office 5.1.6.2 sous windows 10alors que sous windows7 avec les mêmes logiciels ca fonctionne très bien savez vous pourquoi ce bug ? faut-il installer un appli vba pour libre office sous windows 10 ?Merci par avance pour vos réponses John
Patrick_35 Posté(e) le 5 décembre 2016 Posté(e) le 5 décembre 2016 Salut J'ai eu l'info qu'avec la dernière version d'excel, le lisp plantait.Comme je n'ai pas cette version, je n'ai pas pu tester, mais j'ai quand même modifié le lisp en conséquence. @+ 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