Aller au contenu

Routine exportation vers autocad d\'attributs de bloc


Messages recommandés

Posté(e)

Bonjour à tous,

Je suis actuellement en train de développer un lisp me permettant d'extraire des attributs d'un ou plusieurs bloc d'un schémas électrique dans un fichier excel. Mon probléme est d'automatiser mon code avec une boite de dialoque DCL.

Dans cette boitte il sera possible de déterminer le nom du fichier et le chemin du répertoire de destination ou à défaut prendre le nom et le chemin d'accés du fichier DWG pour l'enregistrement du fichier excel et de choisir le type d'attributs à extraire N° de FiIerie et/ou N° de câble.

 

Ci-dessous mon code Lsp et DCL.

 

Merci d'avance pour votre aide.

 

  (defun c:excel ( / OldCmd dcl_id Fichier ) 
 (setq
   OldCmd (getvar "CMDECHO")
   dcl_id (load_dialog "ERAS-EL.dcl")
 )
 (setvar "CMDECHO" 0)
 
 ; Création de la boite
 (new_dialog "export" dcl_id)
 ; Affichage de la boite
 (start_dialog)
 
 ; Déchargement de la boite
 (unload_dialog dcl_id)

 ; Concatenation Adresse Réseau et Nom du Fichier 
 (setq str "fichier")
 (setq nom (strcat "T:\\" str))
 
 ; Exportation des attributs
 (command "-eattext" "dwgCourant" "Non" "Non" "w:\\technique\\autocad\\Symboles DAO 2003\\FIL.blk" "Xls" nom)[/surligneur][/surligneur]

 ; Ouverture du fichier Excel
(vl-load-com)
(if (equal nil msEm-open) 
(vlax-import-type-library
:tlb-filename "c:/program files/Microsoft Office/Office/Excel9.olb"
:methods-prefix "msEm-"
:properties-prefix "msEp-"
:constants-prefix "msEc-"
) 
)
(setq msE (vlax-get-object "Excel.Application.9"))
(setq ExclWorkbs (vlax-get-property msE 'Workbooks))
(setq NWorkb (msEm-open ExclWorkbs "T:\\FIL1"))
(vla-put-visible msE 1)
)

 

  export : dialog {
label = "Exportation Excel";
: edit_box {			// Créer un champ de saisie
label = "Nom du fichier :";
key = "fichier";
edit_width = 10;
}
: column {
	: row {
	fixed_width = true;
	ok_button;
               : spacer { width = 0; }
               cancel_button;
               : spacer { width = 0; }
             }
   }
}

Posté(e)

Bonjour,

 

si c'est juste pour piocher un nom de fichier et un répertoire, le dcl ne me semble pas nécessaire.

 

Yaskifo dans le lisp avec getfiled : (getfiled title default ext flags)

 

 

Dans ton cas, ça pourrait donner :

 

(if (setq id_file (getfiled "Nom du fichier excel à créer" "" "xls" 1))

...

 

 

Le flag a 1 indique une demande de création d'un nouveau fichier. Pour les autres flag, vas voir dans l'aide.

 

La fonction getfiled revoie le chemin défini par l'opérateur ou nil, s'il a cliqué sur annuler.

 

Je n'ai pas testé, mais ça ressemblerai à :

 

(defun c:excel ( / OldCmd dcl_id Fichier )
(setq
OldCmd (getvar "CMDECHO")
(setvar "CMDECHO" 0)

(if (setq nom (getfiled "Nom du fichier excel à créer" "T:\\" "xls" 1))
(progn

; Exportation des attributs
(command "-eattext" "dwgCourant" "Non" "Non" "w:\\technique\\autocad\\Symboles DAO 2003\\FIL.blk" "Xls" nom)

; Ouverture du fichier Excel
(vl-load-com)
(if (equal nil msEm-open)
(vlax-import-type-library
:tlb-filename "c:/program files/Microsoft Office/Office/Excel9.olb"
:methods-prefix "msEm-"
:properties-prefix "msEp-"
:constants-prefix "msEc-"
)
)
(setq msE (vlax-get-object "Excel.Application.9"))
(setq ExclWorkbs (vlax-get-property msE 'Workbooks))
(setq NWorkb (msEm-open ExclWorkbs "T:\\FIL1"))
(vla-put-visible msE 1)
)
)
)

 

[Edité le 22/9/2005 par zebulon_]

C'est au pied du mur que l'on reconnaît le maçon ! (Anonyme)

C’est en restant au pied du mur qu’on ne voit que le mur (Anonyme aussi)

Posté(e)

Merci zébulon pour ton aide zebulon_ ainsi que pour ta remarque Patrick_35, j'en ai pris note et modifier mon code.

J'ai a nouveau besoin d'un renseignement.

 

Tou d'abord voici mon code :

 

Lisp

 (defun c:excel ( / dcl_id NFilerie NCable )
 (setq
   OldCmd (getvar "CMDECHO")
   dcl_id (load_dialog "ERAS-EL.dcl")
   )
 (setvar "CMDECHO" 0)

 ; Création de la boite
 (new_dialog "export" dcl_id)
 ; Fonction d'appel en retour
 (action_tile "about" "(about)")
; (action_tile "filerie" "(fil 1)")
 (action_tile
   "Filerie"
   "(setq fil 1)"
   )
 
 ; Affichage de la boite
 (setq Code_retour (start_dialog))
 
 ; Déchargement de la boite
 (unload_dialog dcl_id)

 ; Impression du ou des folios demandés
 (if (= Code_retour 1)
   ; Création du fichier xls avec nom et chemin d'accés
   (if (setq nom (getfiled "Nom du fichier excel à créer" "T:\\" "xls" 1))
     (progn
; Exportation des attributs
(if (= fil 1)
  (command "-eattext" "dwgCourant" "Non" "Non" "w:\\technique\\autocad\\Symboles DAO 2003\\Aide\\FIL.blk" "Xls" nom))
(if (=  (get_tile "Cabble") "1")
  (command "-eattext" "dwgCourant" "Non" "Non" "w:\\technique\\autocad\\Symboles DAO 2003\\Aide\\CAB.blk" "Xls" nom))
)
     )
   )
 )

 

DCL

 export : dialog {
label = "Exportation Excel";
: radio_button {
	label = "Numeros de Filerie";
	key = "Filerie";
	value = "1";}
: radio_button {
	label = "Numeros de Câble";
	key = "Cable";}
ok_cancel_err;
               : button {
                 key = "about";
                 label = "A propos...";}
}

 

Le probléme c'est que je n'arrive pas à faire le lien entre les boutons de ma boîte et le code Lisp afin de savoir quel type d'attributs je doit extraire du fichier DAO.

Merci d'avance.

Posté(e)

Salut grosseel,

 

D'abord au niveau de la logique, est-ce bien des boutons de radio que tu veux mettre, ou des cases à cocher ?

 

En principe les boutons de radio, quand t'en allume un, l'autre s'éteint. Pour les cases à cocher, on peut en choisir aucune, une, deux ou n.

 

La case à cocher se dit toggle en dcl.

 

un exemple de dcl qui gère des boutons de radio

 
          : boxed_radio_row {
            label = "Matériaux : ";
            key = "mat";
            : radio_button {
              label = "pleine";
              key = "matp";
            }
            : radio_button {
              label = "vitrée";
              key = "matv";
            }
          }

 

 

 

Pour ce qui de la gestion de la boîte de dialogue, pour commencer, ne fait que

 

 
(action_tile "cancel" "(done_dialog 0)")
(action_tile "accept" "(do_accept)")

 

et tu rajoutes une fonction, dans laquelle tu récupères les valeurs de la boîte de dialogue avant de la fermer.

 

Par exemple

 

 

 
(defun do_accept ()
 (setq MAT (get_tile "mat"))
 (done_dialog 2)
)

 

Et dans la variable MAT il y aura soit "matp", soit "matv".

 

Puis, après les action_tile et avant le unload_dialog tu fais

 

 (setq What_next (start_dialog))
 (if (= What_next 2)
   (progn
      ... ce qu'il y a à faire quand tu as cliqué sur OK
   )
 )

 

Pour ce qui est du nom de fichier, je ferais plutôt un bouton "saisir", avec un action_tile correspondant, qui lance la fonction getfiled. Le résultat de getfiled, tu pourras l'afficher dans une zone de texte de la boîte de dialogue en faisant un set_tile.

 

La syntaxe dans dcl

: text {

key = "montexte";

}

 

Dans le lisp

(if (setq nom (getfiled "Nom du fichier excel à créer" "T:\\" "xls" 1))

(set_tile "montexte" nom)

)

 

Pour terminer, dans le do_accept, tu pourras vérifier s'il y a quelque chose dans la case "montexte" avant de faire le (done_dialog 2).

 

 

En gros, Les joies du DCL.

 

Rassure-toi, si c'est des cases à cocher qu'il te faut, c'est beaucoup plus simple.

 

 

 

Amicalement

 

Zebulon_

C'est au pied du mur que l'on reconnaît le maçon ! (Anonyme)

C’est en restant au pied du mur qu’on ne voit que le mur (Anonyme aussi)

Posté(e)

j'ai suivit vos indications mais je n'arrive pas a avoir le choix entre mes 2 possibilité et en plus autocad m'affiche l'erreur suivante "structure incorrecte de la liste en entrée"

 

Voici mon programme corrigé

 

 export : dialog {
label = "Exportation Excel";
: boxed_radio_row {
label = "Exportation : ";
key = "export";
: radio_button {
	label = "Numeros de Filerie";
	key = "Filerie";
	value = "1";}
: radio_button {
	label = "Numeros de Câble";
	key = "Cable";}
}
ok_cancel_err;
: button {
                 key = "about";
                 label = "A propos...";}
}

 

 (defun c:excel ( / OldCmd dcl_id )
 (setq
   OldCmd (getvar "CMDECHO")
   dcl_id (load_dialog "ERAS-EL.dcl")
   )
 (setvar "CMDECHO" 0)

 ; Création de la boite
 (new_dialog "export" dcl_id)
 
 ; Fonction d'appel en retour
   (action_tile "about" "(about)")
  (action_tile "cancel" "(done_dialog 0)")
  (action_tile "accept" "(do_accept)")
 
 ; Affichage de la boite
 (setq What_next (start_dialog))
 (if (= What_next 2)
   (progn
     ; Création du fichier xls avec nom et chemin d'accés
     (setq nom (getfiled "Nom du fichier excel à créer" "T:\\" "xls" 1))
     ;(set_tile "montexte" nom)
     ; Exportation des attributs
     (if (= EXPORT 1)
(command "-eattext" "dwgCourant" "Non" "Non" "w:\\technique\\autocad\\Symboles DAO 2003\\Aide\\FIL.blk" "Xls" nom))
     (if (= EXPORT 2)
(command "-eattext" "dwgCourant" "Non" "Non" "w:\\technique\\autocad\\Symboles DAO 2003\\Aide\\CAB.blk" "Xls" nom))
     )
   (setvar "CMDECHO" OldCmd)
   )

 ; Déchargement de la boite
 (unload_dialog dcl_id)

 ; Fonction pour Récupération des informations de la boite DCL
 (defun do_accept ()
   (setq EXPORT (get_tile "export"))
   (done_dialog 2)
   )

Posté(e)

Essaye comme ça

 

; Fonction pour Récupération des informations de la boite DCL
(defun do_accept ()
 (setq EXPORT (get_tile "export"))
 (done_dialog 2)
 (alert EXPORT) ;; pour débug afficher la valeur récupérée
)


(defun c:excel ( / OldCmd dcl_id )
 (setq
   OldCmd (getvar "CMDECHO") 
   dcl_id (load_dialog "ERAS-EL.dcl") 
 )
 (setvar "CMDECHO" 0)

 ; Création de la boite
 (new_dialog "export" dcl_id)

 ; Fonction d'appel en retour
 (action_tile "about" "(about)")
 (action_tile "cancel" "(done_dialog 0)")
 (action_tile "accept" "(do_accept)")

 ; Affichage de la boite
 (setq What_next (start_dialog))
 (if (= What_next 2)
   (progn
     ; Création du fichier xls avec nom et chemin d'accés
     (setq nom (getfiled "Nom du fichier excel à créer" "T:\\" "xls" 1))
     ; Exportation des attributs
     (if (= EXPORT "Filerie")
       (command "-eattext" "dwgCourant" "Non" "Non" "w:\\technique\\autocad\\Symboles DAO 2003\\Aide\\FIL.blk" "Xls" nom)
       (command "-eattext" "dwgCourant" "Non" "Non" "w:\\technique\\autocad\\Symboles DAO 2003\\Aide\\CAB.blk" "Xls" nom)
     )
   )
   (setvar "CMDECHO" OldCmd)
 )

 ; Déchargement de la boite 
 (unload_dialog dcl_id)

)

C'est au pied du mur que l'on reconnaît le maçon ! (Anonyme)

C’est en restant au pied du mur qu’on ne voit que le mur (Anonyme aussi)

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é