Aller au contenu

créer un tableau Excel à partir de textes entourés par des polylignes


Messages recommandés

Posté(e)

Bonjour à tous,

 

J'ai besoin d'aide, j'ai trois calques, le premier (calque1) contient des textes multiligne, le deuxième (calque2) des textes, et le troisième (calque3) des polylignes.

Il y a un seul MTEXT (calque1) mais beaucoup de textes (calque2) par polyligne (calque3), les polylignes désignent quel textes (calque2) appartiennent à quel texte multiligne (calque1).

J'aimerais si possible, un tableau Excel comme ceci par exemple:

Calque1 Calque2

T1 152

T1 365

T1 36

T1 78

C2 954

C2 321

C2 21

 

Merci d'avance.

Posté(e)

Bonjour,

 

J'ai trouvé une routine LISP de (gile) nommé c:AiresParcelles dans ce sujet, j'ai essayé de la modifier mais je m'y connais très peu en LISP, le résultat est ceci:

 

;;; gc:GetItem (gile)

;;; Retourne le vla-object de l'item s'il est présent dans la collection

;;;

;;; Arguments

;;; col : la collection (vla-object)

;;; name : le nom de l'objet (string) ou son indice (entier)

;;;

;;; Retour : le vla-object ou nil


(defun gc:GetItem (col name / obj)

 (vl-catch-all-apply

   (function (lambda () (setq obj (vla-item col name))))

 )

 obj

)

(defun c:AiresParcelles_mod (/ *error* acdoc filename ss n file pa plst num num2 lay)

 (defun *error* (msg)

   (or (= msg "Fonction annulée")

       (princ (strcat "Erreur: " msg))

   )

   (and file (close file))

   (princ)

 )

 (vl-load-com)

 (setq acdoc  (vla-get-ActiveDocument (vlax-get-acad-object))

       layers (vla-get-Layers acdoc)

 )

 (if (setq lay (gc:GetItem layers "nonconforme"))

   (if (setq ss (ssget "_X" '((8 . "nonconforme"))))

     (alert "Il reste des objets sur le calque\"nonconforme\"")

     (vla-delete lay)

   )

   (if

     (and

       (setq filename (getfiled "AiresParcelles" (getvar "DWGPREFIX") "xls" 1))

       (princ "\nSélectionnez les polylignes (ou valider pour toutes).")

       (or (ssget '((0 . "LWPOLYLINE") (8 . "Calque3")))

           (ssget "_X" '((0 . "LWPOLYLINE") (8 . "Calque3")))

       )

     )

      (progn

        (setq file (open filename "w"))

        (write-line "Calque1\tCalque2" file)

        (vlax-for pl (setq ss (vla-get-ActiveSelectionSet acdoc))

          (setq pa   (fix (vlax-curve-getendParam pl))

                plst nil

          )

          (while (setq pt (vlax-curve-getPointAtParam pl pa))

            (setq pa   (1- pa)

                  plst (cons (trans pt 0 1) plst)

            )

          )

          (setq num (ssget "_WP" plst '((0 . "MTEXT") (8 . "Calque1")))
	   
	 num2 (ssget "_WP" plst '((0 . "TEXT") (8 . "Calque2")))
   )

          (if (or (not num) (not num2))

            (progn

              (or lay (setq lay (vla-add layers "nonconforme")))

              (vla-put-Color lay 30)

              (vla-put-layer pl "nonconforme")

            )

            (write-line

              (strcat

                (vla-get-TextString (vlax-ename->vla-object (ssname num 0)))

                "\t"

                (vla-get-TextString (vlax-ename->vla-object (ssname num2 0)))

              )

              file

            )

          )

        )

        (close file)

        (vla-delete ss)

        (and lay (alert "Parcelle(s) non conforme(s)"))

      )

   )

 )

 (princ)

)

 

ça marche pour la colonne de Calque1, mais ça renvois que un seul des textes de Calque2 qui correspondent au MTEXT de Calque1.

Exemple:

T1 152

C2 954

M3 11

 

est ce que c'est réparable avec repeat ou autres commandes ? si oui, comment?

 

Merci d'avance pour votre aide.

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é