Aller au contenu

lier un dessin a excell


Messages recommandés

Posté(e)

bonjour

 

j ai un dessin avec un reseau AEP

on me demande de faire un tableau avec le

-nom de la rue le Ø du reseau de cette rue et la longueur du reseau de cette rue

exemple

rue de la republique Ø100 Fonte longueur 521ml

comment faire sans reprendre tout le dessin en mesurant car j ai 500rue!!!!!!!!!!!

peut on en cliquant sur le reseau d une rue mettre les valeurs automatiquement dans le tableau excel dans la bonne ligne

 

merci pour votre aide

Posté(e)

Bonsoir à toutes et tous,

 

peut on en cliquant sur le reseau d une rue mettre les valeurs automatiquement dans le tableau excel dans la bonne ligne

 

Faut tout de même pas rêver,... :o :cool: :P

 

Non, par contre un bloc avec attributs :

 

- nom de la rue

- Ø du reseau

- longueur du réseau

 

Ensuite, une fois ce bloc inséré et renseigné, les outils attout et attin des express tools peuvent faire ce que tu veux,..

 

Éventuellement, rajoute une étiquette N° et rempli les diverses infos de tes attributs directement depuis Excel après avoir fait un "attout" de tes blocs,...

 

 

Civil 3D 2025 - COVADIS_18.3b

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

Posté(e)

Bonjour à toutes et tous,

 

Pour le dessin en question, un prog spécifique semble incontournable, mais qui sait,...

 

Sans passer par de prog spécifique et pour le prochain besoin du même style, tu peux utiliser une polyligne "bloc" avec attribut champ "longueur" pour la longueur du réseau et un attribut champ diamètre c'est à dire le nom du calque si j'ai bien compris et un attribut à renseigner "Nom de la rue",...

 

Tu pourras alors récupérer ces infos sous Excel avec l'extraction des attributs ou "attout" des express tool,..

 

Un exemple pour un calque "Diam 315", par exemple (à adapter)

 

J'ai centré l'info de distance sur la polyligne et le Diamètre, donc le nom du calque, en départ de polyligne ainsi que le nom de la rue.

 

Tu peux bien entendu te servir de cet exemple pour l'adapter à tes besoins, si le principe te convient,..

 

http://img.ahst.fr/data/images/polydyn.jpg

Civil 3D 2025 - COVADIS_18.3b

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

Posté(e)

Voici une première ébauche mais si tu veux un lisp plus complet, il faudrait éclaircir concrètement ta demande,

 

Ce lisp ne marche que pour des polylignes 2D simples, non optimisés et avec des noms de rues sous forme de texte

 

(defun c:aep1 (/ ss file i ent txt txt1 diam ldxf_10 len)
(prompt "\nSélectionner les polylignes à lister dans fichier .xls")
(setq ss (ssget '((0 . "LWPOLYLINE"))))
(if (= ss nil)
(progn
(prompt "\nPas de polylignes sélectionnés")
(exit)
)
(progn
(setq file (open "C:/TMP/Reseau_AEP.xls" "w"))
(write-line (strcat "Nom Rue" "\t" "ØAEP" "\t" "Longueur Conduite") file)
(setq i 0)
(repeat (sslength ss)
(setq ent (ssname ss i))
(setq txt1 (car (entsel (strcat "\nSélectionner le nom de la rue de la conduite n° " (itoa (1+ i))))))
(setq txt (cdr (assoc 1 (entget txt1))))
(setq diam (cdr (assoc 8 (entget ent))))
(setq ldxf_10 (mapcar 'cdr (vl-remove-if-not '(lambda (x) (= (car x) 10)) (entget ent))))
(setq len (vlax-curve-getDistAtParam ent (- (length ldxf_10) 1)))

(write-line (strcat txt "\t" diam "\t" (rtos len  2 5)) file)
(setq i (+ i 1))
)
(close file)
(OpenExcel "C:/TMP/Reseau_AEP.xls" nil t)
)
)
(prin1)
) 

 

De plus, il te faut pour le faire marcher la OpenExcel que Gile à merveillement réalisé que tu pourras trouver ici

 

http:// http://www.cadxp.com/XForum+print-fid-141-tid-17416.html

 

John

Posté(e)

Bonjour,

 

Voici le lisp de chris_mtp un peu modifié :

- fonction OpenExcel intégrée directement

- le fichier est créé automatiquement dans le dossier temporaire de Windows, quel qu'il soit (plutôt que dans C:/TMP >> erreur si le répertoire n'existe pas).

 

 

;;-------------------------------------------------------------------------------

;; OpenExcel - Ouvre une feuille Excel

;; Arguments : 3

;;   ExcelFile$ = Nom de fichier excel ou nil pour une nouvelle feuille

;;   SheetName$ = Nom de la feuille ou nil pour non spécifié

;;   Visible = T pour visible ou nil pour cachée

;; Exemples de syntaxe :

;; (OpenExcel "C:\\Temp\\Temp.xls" "Feuil2" t) = Ouvre C:\Temp\Temp.xls sur la Feuille2 en session visible

;; (OpenExcel "C:\\Temp\\Temp.xls" nil nil) = Ouvre C:\Temp\Temp.xls sur la feuille courante

;; (OpenExcel nil "Parts List" nil) =  Ouvre un nouveau classeur et crée une feuille "Parts List" en session cachée

;;-------------------------------------------------------------------------------

(defun OpenExcel (ExcelFile$ SheetName$ Visible / Sheet$ Sheets@ Worksheet)

 (if (= (type ExcelFile$) 'STR)

   (if	(findfile ExcelFile$)

     (setq *ExcelFile$ ExcelFile$)

     (progn

(alert (strcat "FichierExcel " ExcelFile$ " non trouvé."))

(exit)

     )

   )

   (setq *ExcelFile$ "")

 )

 (gc)

 (if (setq *ExcelApp% (vlax-get-object "Excel.Application"))

   (progn

     (alert "Fermeture de toutes les feuilles.")

     (vlax-release-object *ExcelApp%)

     (gc)

   )

 )

 (setq *ExcelApp% (vlax-get-or-create-object "Excel.Application"))

 (if ExcelFile$

   (if	(findfile ExcelFile$)

     (vlax-invoke-method

(vlax-get-property *ExcelApp% 'WorkBooks)

'Open

ExcelFile$

     )

     (vlax-invoke-method

(vlax-get-property *ExcelApp% 'WorkBooks)

'Add

     )

   )

   (vlax-invoke-method

     (vlax-get-property *ExcelApp% 'WorkBooks)

     'Add

   )

 )

 (if Visible

   (vla-put-visible *ExcelApp% :vlax-true)

 )

 (if (= (type SheetName$) 'STR)

   (progn

     (vlax-for	Sheet$ (vlax-get-property *ExcelApp% "Sheets")

(setq Sheets@ (append Sheets@ (list (vlax-get-property Sheet$ "Name"))))

     )

     (if (member SheetName$ Sheets@)

(vlax-for Worksheet (vlax-get-property *ExcelApp% "Sheets")

  (if (= (vlax-get-property Worksheet "Name") SheetName$)

    (vlax-invoke-method Worksheet "Activate")

  )

)

(vlax-put-property

  (vlax-invoke-method

    (vlax-get-property *ExcelApp% "Sheets")

    "Add"

  )

  "Name"

  SheetName$

)

     )

   )

 )

 (princ)

)




(defun c:aep1 (/ ss file i ent txt txt1 diam ldxf_10 len)

(vl-load-com)

(prompt "\nSélectionner les polylignes à lister dans fichier .xls")

(setq ss (ssget '((0 . "LWPOLYLINE"))))

(if (= ss nil)

(progn

(prompt "\nPas de polylignes sélectionnés")

(exit)

)

(progn

(setq xls (vl-filename-mktemp "Reseau_AEP.xls"))
(setq file (open xls "w"))

(write-line (strcat "Nom Rue" "\t" "ØAEP" "\t" "Longueur Conduite") file)

(setq i 0)

(repeat (sslength ss)

(setq ent (ssname ss i))

(setq txt1 (car (entsel (strcat "\nSélectionner le nom de la rue de la conduite n° " (itoa (1+ i))))))

(setq txt (cdr (assoc 1 (entget txt1))))

(setq diam (cdr (assoc 8 (entget ent))))

(setq ldxf_10 (mapcar 'cdr (vl-remove-if-not '(lambda (x) (= (car x) 10)) (entget ent))))

(setq len (vlax-curve-getDistAtParam ent (- (length ldxf_10) 1)))



(write-line (strcat txt "\t" diam "\t" (rtos len  2 5)) file)

(setq i (+ i 1))

)

(close file)

(OpenExcel xls nil t)

)

)

(prin1)

)

 

Par contre il faudra probablement changer la méthode, car pour l'instant si on choisit plusieurs polylignes à la première étape, on ne sait pas ensuite dans quel ordre choisir les textes...

Posté(e)

Salut,

 

Il me semble qu'il y ait quelque confusion.

 

(setq file (open xls "w"))

n'utilise pas OpenExcel mais la fonction prédéfinie open qui démarre un flux (stream) en écriture pour un fichier ASCII (.txt, .csv, ...).

Avec l'extension .xls le fichier généré sera un fichier texte avec séparateur tabulation (normalement lisible par Excel).

Cette façon de procéder n'est pas très orthodoxe et provoque peut-être des erreurs avec les nouvelles versions d'Excel (je ne peux pas tester).

 

Il est préférable, mon avis,

- soit de créer un fichier .csv (séparateur = point-virgule par défaut sur les versions française de Windows) et d'utiliser les fonction prédéfinies open et close ;

- soit de créer un 'vrai' fichier Excel, avec OpenExcel par exemple, mais à ce moment là il faut utiliser les fonction définies dans ce LISP : OpenExcel, PutCell et CloseExcel.

 

La première solution est plus rapide car elle ne nécessite pas le démarrage d'un processus Excel.

 

Dans tous les cas, le problème du lien inexistant entre un texte et une polyligne reste entier.

 

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

Posté(e)

Re,

 

Je ne suis sûr d'avoir bien compris la demande (et je crains, en proposant une solution, de mettre encore une fois le doigt dans un engrenage qui risque de m'emmener je ne sais où).

 

Le LISP suivant demande de spécifier un fichier csv, on peut en créer un nouveau ou en choisir un existant, dans ce dernier cas, il est demandé s'il faut Remplacer le contenu du fichier ou Ajouter au contenu.

 

Puis, le LISP demande, en boucle, de choisir un texte (nom de rue) et les polylignes correspondant à ce texte. Pour sortir de la boucle faire Entrée, Espace, clic droit à l'invite : "Sélectionnez un nom de rue: ".

 

(defun c:audrey	(/ *error* filename mode sep file line ent elst pl)
 (vl-load-com)
 (or *acad* (setq *acad* (vlax-get-acad-object)))
 (or *acdoc* (setq *acdoc* (vla-get-ActiveDocument *acad*)))

 (defun *error* (msg)
   (and msg
 (or (= msg "Fonction annulée")
     (princ (strcat "Erreur: " msg))
 )
   )
   (and file (close file))
   (princ)
 )

 (if (setq filename (getfiled "Spécifiez le ficher d'extraction" (getvar 'dwgprefix) "csv" 33))
   (progn
     (setq mode
	 (if (findfile filename)
	   (progn
	     (initget 1 "Ajouter Remplacer")
	     (if (=
		   (getkword
		     "\nLe fichier existe déjà, choisissez une option [Ajouter/Remplacer]: "
		   )
		   "Ajouter"
		 )
	       "a"
	       "w"
	     )
	   )
	   "w"
	 )
    sep	 (vl-registry-read "HKEY_CURRENT_USER\\Control Panel\\International" "sList")
    file (open filename mode)
     )
     (and (= mode "w") (write-line (strcat "Nom de rue" sep "ØAEP" sep "Longueur") file))
     (while (setq ent (car (entsel "\nSélectionnez un nom de rue: ")))
(if (= "TEXT" (cdr (assoc 0 (setq elst (entget ent)))))
  (progn
    (setq txt (cdr (assoc 1 elst)))
    (princ "\nSélectionnez les réseaux pour cette rue")
    (if	(ssget '((0 . "LWPOLYLINE")))
      (progn
	(vlax-for pl (vla-get-ActiveSelectionSet *acdoc*)
	  (write-line
	    (strcat txt sep (vla-get-Layer pl) sep (rtos (vla-get-Length pl)))
	    file
	  )
	)
      )
    )
  )
  (princ "\nL'entité sélectionnée n'est pas un texte.")
)
     )
   )
 )
 (*error* nil)
)

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

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é