Aller au contenu

Export vers calc libre office


Messages recommandés

Posté(e)

Bonjour à tous

Existe 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 5

Existe 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

Posté(e)

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

Posté(e)

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

Posté(e)

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.

Posté(e)

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 Patrick

Le but n'est pas toujours placé pour être atteint, mais pour servir de point de mire.

Joseph Joubert, 1754-1824

Posté(e)

Bonjour à tous

Merci pour vos réponses

j'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 marcher

Dernière question vincentp010, n'aurais tu pas par hasard une fonction cette fois ci pour lire une cellule dans un fichier calc de libre office

Merci par avance à vous tous

John

Posté(e)

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 Patrick

Le but n'est pas toujours placé pour être atteint, mais pour servir de point de mire.

Joseph Joubert, 1754-1824

Posté(e)

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.

Posté(e)

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.

Posté(e)

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 Patrick

Le but n'est pas toujours placé pour être atteint, mais pour servir de point de mire.

Joseph Joubert, 1754-1824

Posté(e)

Bonjour à tous

Je confirme avec les fonctions de Patrick ca marche nickel

Ceci é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 retours

John

Posté(e)

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 Patrick

Le but n'est pas toujours placé pour être atteint, mais pour servir de point de mire.

Joseph Joubert, 1754-1824

Posté(e)

Bonjour Patrick

 

Oui on fera un nouveau sujet avec libre office et writer

je termine mes fonctions export vers libre office et je m'en occupe

Merci encore pour votre aide

John

Posté(e)

Patrick

 

plus j'approfondi et plus les deux fonctions nouveau_fichier et ouvrir_fichier me posent problèmes

j'ai fais plusieurs tests avec libre office calc et Autocad 2013

si le fichier existe avec extension ods, pas de problème le fichier s'ouvre en lançant depuis autocad

mais 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 ods

dans mon cas, les fonctions de vincentp010 sont plus simples à utiliser

 

par contre, il manque une fonction essentielle de vincentp10, celle de lire une cellule

et 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

  • 4 mois après...
Posté(e)

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 10

alors 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

Posté(e)

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 Patrick

Le but n'est pas toujours placé pour être atteint, mais pour servir de point de mire.

Joseph Joubert, 1754-1824

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 compte

Se connecter

Vous avez déjà un compte ? Connectez-vous ici.

Connectez-vous maintenant
×
×
  • Créer...

Information importante

Nous avons placé des cookies sur votre appareil pour aider à améliorer ce site. Vous pouvez choisir d’ajuster vos paramètres de cookie, sinon nous supposerons que vous êtes d’accord pour continuer. Politique de confidentialité