Aller au contenu

Autocad vers Excel avec fichier deja existant et emplacement choisi


Messages recommandés

Posté(e)

Bonsoir,

 

Speedy:

tu remplaces la ligne [surligneur] valeur=poly.area[/surligneur] par [surligneur]valeur= poly.length [/surligneur]

Pour plus de sélection, sagit-il de plusieurs polylignes ? que souhaites-tu exactement.

 

Nono64:

il n 'est pas question de transformer du vba en Lisp.

Si tu veux l 'utiliser, il ne s 'agit que d 'un exemple mais adaptable, va voir la procédure donnée par Sechanbask ici

 

Je n 'ai pas précisé, mais il faut bien sûr charger depuis vba autocad, la bibliothèque des éléments Excel.

Menu outils >> references >> Microsoft Excel object Library

Posté(e)

Re,

 

Tien oui, c'est bizarre, quand je rouvre EXCel, j'ai un fichier nommé "classeur 2" qui remplit les cellules A1 à E1 avec ces caractères :

 

"GP093 58.5 17 Base 3'-6 1/4"

 

Bizarre, Bizarre cette affaire,...

 

Lorsque j'éteind ce fichier, je retrouve le fichier "Test.xls" rempli des mêmes informations !!!???

Si je le fais plusieurs foix, j'ai différents fichiers créés (Classeur1; 2 ; 3 ; 4,...) et toujours avec ce même remplissage de cellules !

 

Civil 3D 2025 - COVADIS_18.3b

https://www.linkedin...3%ABt-95313341/

Posté(e)

lili2006,

 

C'est normal, l'exemple ouvre un nouveau fichier :

 

;; ouvrir un nouveau classeur

(OpenExcel nil "Feuille1" nil)

 

Le premier argument pour OpenExcel est nil. Pour ouvrir et écrire dans le fichier le fichier Test.xls, il faudrait mettre :

 

(OpenExcel (strcat "C:\\Documents and Settings\\" getvar "LOGINNAME") "\\Bureau\\Test.xls") "Feuille1" nil)

 

Ceci explique aussi le message que tu as eu, les fichiers sont créés mais ni fermés ni enregistrés.

 

Pour utiliser ces routines il faut bien comprendre ce qu'elles font et à quoi correspondent leurs arguments (c'est dans les commentaires en en_tête et au début de chaque routine).

 

[Edité le 7/11/2007 par (gile)]

Gilles Chanteau - gileCAD - GitHub
Développements sur mesure pour AutoCAD

Posté(e)

Merci (gile) et les autres pour toute votre aide.

J'ai enfin réussi à faire ce que je voulais. Je me suis servi de GetExcel que tu m"as filé et j'ai rajouté quelques lignes de codes pour que ce ne soient pas des valeurs pré-enregistrées mais des variables (exemple surface ou périmètre d'une ou plusieurs polylignes sélectionnées à l'écran) et oh miracle ca marche !!

Merci pour tout.

 

Si ca intéresse certains d'entre vous je pourrai mettre en ligne ce que j'ai rajouté lorsque le programme sera bien finalisé et rodé.

 

Bred, en ce qui concerne tes routines, cela marche effectivement très bien, mais cela ne correspondait pas exactement à ce que je recherchais, merci quand même !

A bientôt.

 

Arno

Posté(e)

Bonjour à tous,

J'ai un problème très similaire à celui que vous avez résolu,

sauf que moi c'est un cumul de surface de hachures par calque que j'ai besoin d'envoyer en dynamique sur un tableau excel existant ....

puis-je y arriver à partir des routines proposées, est-ce que je peux changer le poly-area en hatch-area ou quelque chose du genre ?

Merci de votre aide si quelqu'un a un bout de routine dans ce sens ...

Mireille

 

Posté(e)

J'ai ajouté 3 petites routines à GetExcel.lsp :

 

Cell-p : pour évaluer la validité d'un nom de référence de cellule

Column+n : pour incrémenter sur les colonnes

Row+n : pour incrémenter sur les rangées

 

[Edité le 10/11/2007 par (gile)]

Gilles Chanteau - gileCAD - GitHub
Développements sur mesure pour AutoCAD

Posté(e)

Salut à tous,

petite question supplémentaire : GetExcel.lsp ne fonctionne pas si la case de destination sur Excel est nommée.

Exemple : (PutCell "C21" (list "GP093" 58.5 17 "Base" "3'-6 1/4\"")) fonctionne mais si l'on nomme la case C21 cela ne fonctionne plus.

En effet, si l'on écrit : (PutCell "Surface" (list "GP093" 58.5 17 "Base" "3'-6 1/4\"")) Autocad renvoie " erreur: fonction incorrecte: "surface" ".

 

(gile) aurais-tu une idée ?

 

Merci encore.

Posté(e)

Salut,

 

PutCell est prevue pour fonctionner avec des références de cellules du type "B6" qui sont ensuite converties en liste (2 6) (2ème colonne 6ème rangée).

Je ne suis pas sûr qu'il soit possible en LISP de retouver une cellule nommée, j'essayerais de regarder...

Gilles Chanteau - gileCAD - GitHub
Développements sur mesure pour AutoCAD

Posté(e)

Salut (gile)

 

Je décompose la démarche afin de t'indiquer la logique.

 

(setq fic (getfiled "Veuillez sélectionner un fichier Excel" "" "xls" 16))

; Lance Excel si besoin, sinon se connecte dessus
(setq xl (vlax-get-or-create-object "Excel.Application"))

(setq wks (vlax-get xl 'Workbooks))

; Regarde si le fichier Excel n'est pas ouvert
(vlax-for sel wks
 (and (eq (strcase (vlax-get sel 'fullname)) (strcase fic))
   (setq xls sel)
 )
)

; Si le fichier Excel n'est pas ouvert, on l'ouvre
(or xls
 (setq xls (vlax-invoke wks 'open fic))
)

(setq classeur (vlax-get xls 'sheets))

(setq dest "Un_Nom_de_Cellule") ; Choix de la cellule ou du nom

(setq val "Test") ; Valeur à écrire

; On recherche dans le classeur pour trouver la feuille avec la cellule nommée et y écrire la valeur
(vlax-for feuille classeur
 (or (vl-catch-all-error-p (setq cel (vl-catch-all-apply 'vlax-get-property (list feuille 'range dest))))
   (vlax-put cel 'value2 val)
 )
)

; Si on connait la feuille où se trouve la cellule nommée pour éviter la boucle, on peut faire
(setq feuille "Une_Feuille_Nommée") ; Choix de la feuille par son nom

(vlax-put (vlax-get-property (vlax-get-property classeur 'item feuille) 'range dest) 'value2 val)

; Fermer le fichier sans sauvegarde
(vlax-invoke-method xls 'close :vlax-false)

; Nettoyage de la mémoire
(foreach sel (list xl wks xls classeur)
 (vlax-release-object sel)
)
(setq xl nil wks nil xls nil classeur nil)
(gc)(gc)

 

@+

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)

J'ai modifié PutCell dans GetExcel.lsp (Réponse 7), on peut désormais utiliser un nom de cellule comme argument pour PutCell (la cellule nommée doit exister dans la feuille active)

 

Encore merci à Patrick_35 qui m'a bien aiguillé sur la voie.

Gilles Chanteau - gileCAD - GitHub
Développements sur mesure pour AutoCAD

Posté(e)

bonjour,

Je viens de teste getexcel.

Mais je rencontre un p'tit soucis , certainement par manque d'expérience...

 

Voila j'ai chargé le lisp getexcell.lsp

Puis ensuite ce que je voulais faire c'était d'ouvrir un fichier existant

 

 (OpenExcel "C:\\AFFAIRES\\A41-IMP_OH.xls" "OH" nil)

 

Et là rien je pense qu'il est ouvert en arriere plan , mais comment le rendre visible?

 

Merci

Posté(e)

Salut,

 

Lis bien les commentaire (pour une fois qu'il y en a), le dernier argument pour OpenExcel c(est : Nil pour invisible. T pour visible.

 

Mais avant de relancer OpenExecl, pense à refermer le fichier :

 

(CloseExcel "C:\\AFFAIRES\\A41-IMP_OH.xls")

Gilles Chanteau - gileCAD - GitHub
Développements sur mesure pour AutoCAD

  • 3 semaines après...
Posté(e)

J'ai mis à jour les routines column+n et row+n (réponse 7 première page) pour éviter les retours non valides du style : "@2" ou "B0" aux expressions (column+n "B2" -2) et (row+n "B2" -2) , les retours sont désormais respectivement "A2" et "B1".

Gilles Chanteau - gileCAD - GitHub
Développements sur mesure pour AutoCAD

  • 7 ans après...
Posté(e)

Bonjour à tous,

 

Je fais un joli déterrage de sujet.

Je suis en ce moment sur un petit programme ou j'ai besoin de lire et d'enregistrer des données depuis un tableau Excel.

 

Les routines fournis dans ce sujet me sujet mais j'aimerais comprendre comment vous faites pour les construire notamment pour la partie enregistrer sous. Dans l'aide, il n'est question uniquement d'enregistrement de fichier Autocad.

 

(defun c:Example_SaveAs()
   ;; The following example saves current drawing as "test.dwg"
   (setq acadObj (vlax-get-acad-object))
   (setq doc (vla-get-ActiveDocument acadObj))

   (vla-SaveAs doc "test.dwg")
)

 

Comment arrive tu à ceci.

 

(vlax-invoke-method
     (vlax-get-property *ExcelApp% "ActiveWorkbook")
     "SaveAs"
     ExcelFile$
     -4143
     ""
     ""
     :vlax-false
     :vlax-false
     nil
   )

 

J'arrive parfaitement en enregistrer mon fichier avec une extension .XLS et non .XLSX

Je suppose que le -4143 joue un rôle mais je ne trouve rien là dessus.

 

Merci pour vos éventuelles réponses.

Olivier

PS : Je suis débute en Vlisp et patauge un peu dans l'aide.

Posté(e)

Salut

 

Après une recherche

C'est le type de fichier. 51 pour le xlsx

 

Pour retrouver tes petits :

(setq xls (vlax-get-or-create-object "excel.application"))

Ensuite, il reste pluq qu'a lire ;)

(vlax-dump-object xls T)

Libérer ou supprimer Excel de la mémoire (s'il n'a pas été lancé auparavant)

(vlax-release-object xls)

 

@+

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)

Salut Patrick35,

 

Merci pour cette réponse rapide. Je commences à comprendre.

 

Ensuite, il reste pluq qu'a lire ;)

(vlax-dump-object xls T)

 

La cela va prendre un peu de temps ;) :D

 

Olivier

Posté(e)

Après de nouvelle recherche,

 

Ici par exemple

 

     51              ;format du fichier
     ""                 ;mot de passe ??
     ""                 ;pourquoi 2 lignes ??
     :vlax-false        ;lecture seule ne recomandée
     :vlax-false        ;pas de création de backup
     nil                ;alors là aucune idée.
   )

 

Cela marche nickel mais je comprends pas tout (et j'aime pas ne pas comprendre ce que j'écris :( ).

 

Olivier

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é