Aller au contenu

CHANGER LES CARACTERISTIQUES D UN TABLEAU


PHILPHIL

Messages recommandés

bonjour

 

voici un LISP pour changer les caractéristiques d'un tableau existant

merci a Gile de son aide

 

attention il change tout les textes en "arial" sauf la première rangée

modifier "arial" en autre chose

 

a tester

 

5 sec pour modifier 3 tableaux de 1750 cases

 

bon week end

 

Phil

 

 ; -------------------------------------------
; CHANGEMENT DES CARACTERISTIQUE D UN TABLEAU
; -------------------------------------------

(defun c:change_caracteristique_tableau (/ bl lst nbcolonne nbrangee compt)
 (setvar "cmdecho" 0)
 (setvar "dimzin" 0)
 (prompt "\nCLIQUER SUR LE(S) TABLEAU(X) A MODIFIER :")
 (setq bl nil)
 (while (null bl) (setq bl (ssget (list (cons 0 "ACAD_TABLE")))))
 (setq ent nil)
 (setq compt 0)
 (setq com (sslength bl))
 (setq tablargcolon1 (getcfg "APPDATA/tablargcolon1"))
 (setq tablargcolon2 (getcfg "APPDATA/tablargcolon2"))
 (setq tablargcolon3 (getcfg "APPDATA/tablargcolon3"))
 (setq tablargcolon4 (getcfg "APPDATA/tablargcolon4"))
 (setq tablargcolon5 (getcfg "APPDATA/tablargcolon5"))
 (setq tablargcolon6 (getcfg "APPDATA/tablargcolon6"))
 (setq tablargcolon7 (getcfg "APPDATA/tablargcolon7"))
 (setq tablargcolon8 (getcfg "APPDATA/tablargcolon8"))
 (setq tablargcolon9 (getcfg "APPDATA/tablargcolon9"))
 (setq tablargcolon10 (getcfg "APPDATA/tablargcolon10"))
 (setq tabhautmax (getcfg "APPDATA/tabhautmax"))
 (setq tablargeentrcolon (getcfg "APPDATA/tablargeentrcolon"))
 (setq tabmargehori (getcfg "APPDATA/tabmargehori"))
 (setq tabmargevert (getcfg "APPDATA/tabmargevert"))
 (setq tabhauttexte (getcfg "APPDATA/tabhauttexte"))
 (setq tabaligntexte (getcfg "APPDATA/tabaligntexte"))
 (setq tabhautrangee (getcfg "APPDATA/tabhautrangee"))
 (setq lst nil)
 (setq lst (cons (cons '"HAUTEUR DU TEXTE" tabhauttexte) lst))
 (setq lst (cons (cons '"TYPE ALIGNEMENT DU TEXTE DANS LA CELLULE [1,2,3,4,5,6,7,8,9]" tabaligntexte) lst))
 (setq lst (cons (cons '"HAUTEUR DE LA RANGEE" tabhautrangee) lst))
 (setq lst (cons (cons '"MARGE VERTICALE DU TEXTE DANS LA CELLULE" tabmargevert) lst))
 (setq lst (cons (cons '"MARGE HORIZONTALE DU TEXTE DANS LA CELLULE" tabmargehori) lst))
 (setq lst (cons (cons '"HAUTEUR MAXI DU TABLEAU [ 0: UNE COLONNE DE TABLEAU, MAXI : PLUSIEURS COLONNES DE TABLEAU ]" tabhautmax) lst))
 (setq lst (cons (cons '"LARGEUR ENTRE COLONNE DE TABLEAU" tablargeentrcolon) lst))
 (setq lst (cons (cons '"LARGEUR COLONNE  1 DU TABLEAU" tablargcolon1) lst))
 (setq lst (cons (cons '"LARGEUR COLONNE  2 DU TABLEAU" tablargcolon2) lst))
 (setq lst (cons (cons '"LARGEUR COLONNE  3 DU TABLEAU" tablargcolon3) lst))
 (setq lst (cons (cons '"LARGEUR COLONNE  4 DU TABLEAU" tablargcolon4) lst))
 (setq lst (cons (cons '"LARGEUR COLONNE  5 DU TABLEAU" tablargcolon5) lst))
 (setq lst (cons (cons '"LARGEUR COLONNE  6 DU TABLEAU" tablargcolon6) lst))
 (setq lst (cons (cons '"LARGEUR COLONNE  7 DU TABLEAU" tablargcolon7) lst))
 (setq lst (cons (cons '"LARGEUR COLONNE  8 DU TABLEAU" tablargcolon8) lst))
 (setq lst (cons (cons '"LARGEUR COLONNE  9 DU TABLEAU" tablargcolon9) lst))
 (setq lst (cons (cons '"LARGEUR COLONNE 10 DU TABLEAU" tablargcolon10) lst))
 (setq lst (reverse lst))
 (7-10inputbox "CHANGER LES CARACTERISTIQUES DES TABLEAUX"
               "CARACTERISTIQUES DU TABLEAU"
               "LARGEURS DES COLONNES"
               lst
 )
 (setcfg "APPDATA/tabhauttexte" (cdr (nth 0 res)))
 (setcfg "APPDATA/tabaligntexte" (cdr (nth 1 res)))
 (setcfg "APPDATA/tabhautrangee" (cdr (nth 2 res)))
 (setcfg "APPDATA/tabmargevert" (cdr (nth 3 res)))
 (setcfg "APPDATA/tabmargehori" (cdr (nth 4 res)))
 (setcfg "APPDATA/tabhautmax" (cdr (nth 5 res)))
 (setcfg "APPDATA/tablargeentrcolon" (cdr (nth 6 res)))
 (setcfg "APPDATA/tablargcolon1" (cdr (nth 7 res)))
 (setcfg "APPDATA/tablargcolon2" (cdr (nth 8 res)))
 (setcfg "APPDATA/tablargcolon3" (cdr (nth 9 res)))
 (setcfg "APPDATA/tablargcolon4" (cdr (nth 10 res)))
 (setcfg "APPDATA/tablargcolon5" (cdr (nth 11 res)))
 (setcfg "APPDATA/tablargcolon6" (cdr (nth 12 res)))
 (setcfg "APPDATA/tablargcolon7" (cdr (nth 13 res)))
 (setcfg "APPDATA/tablargcolon8" (cdr (nth 14 res)))
 (setcfg "APPDATA/tablargcolon9" (cdr (nth 15 res)))
 (setcfg "APPDATA/tablargcolon10" (cdr (nth 16 res)))
 (while (< compt com)
   (setq ent1 (cdr (car (entget (ssname bl compt)))))
   (setq nbcolonne (vla-get-columns (vlax-ename->vla-object ent1)))
   (setq nbrangee (vla-get-rows (vlax-ename->vla-object ent1)))
   (vla-put-regeneratetablesuppressed (vlax-ename->vla-object ent1) :vlax-true) ; Suppress table regen
   (vla-put-vertcellmargin (vlax-ename->vla-object ent1) (atof (cdr (nth 3 res)))) ; marge verticale dans les cellules
   (vla-put-horzcellmargin (vlax-ename->vla-object ent1) (atof (cdr (nth 4 res)))) ; marge horizontale dans les cellules
   (vla-put-tablebreakheight (vlax-ename->vla-object ent1) (atof (cdr (nth 5 res)))) ; hauteur maxi du tableau
   (vla-put-breakspacing (vlax-ename->vla-object ent1) (atof (cdr (nth 6 res)))) ; espace entre les colonnes de tableau
   (setq rang 1
         colon 0
   )
   (repeat (- nbrangee 1)
     (progn (setq colon 0)
            (repeat nbcolonne
              (vla-setcelltextstyle (vlax-ename->vla-object ent1) rang colon "Arial") ; gere le style de texte
              (vla-setcelltextheight (vlax-ename->vla-object ent1) rang colon (atof (cdr (nth 0 res)))) ; gere la hauteur du texte dans la case
              (vla-setcellalignment (vlax-ename->vla-object ent1) rang colon (atof (cdr (nth 1 res)))) ;1: haut gauche, 2: haut centre, 3:haut droit, 4: milieu gauche, 5: mileu centre, 6: milieu droit, 7: bas gauche, 8: bas centre, 9: bas droit
              (setq colon (1+ colon))
            )
            (vla-setrowheight (vlax-ename->vla-object ent1) rang (atof (cdr (nth 2 res)))) ; gere la hauteur de la rangée
            (setq rang (1+ rang))
     )
   )
   (setq colon 0)
   (repeat nbcolonne
     (vla-setcolumnwidth (vlax-ename->vla-object ent1) colon (atof (cdr (nth (+ 7 colon) res)))) ; largeur de la colonne 0
     (setq colon (1+ colon))
   )
   (vla-put-regeneratetablesuppressed (vlax-ename->vla-object ent1) :vlax-false)
   (setq compt (1+ compt))
 )
 (prompt "\n")
 (setvar "dimzin" 8)
)




(defun 7-10inputbox (box col1 col2 lst / temp file keys i dcl_id
;;;                     res
                    )
 (setq temp (vl-filename-mktemp "Tmp.dcl")
       file (open temp "w")
       keys '("val1"
              "val2"
              "val3"
              "val4"
              "val5"
              "val6"
              "val7"
              "val8"
              "val9"
              "val10"
              "val11"
              "val12"
              "val13"
              "val14"
              "val15"
              "val16"
              "val17"
              )
 )
 (write-line (strcat
               "xInputBox:dialog{key=\"box\";initial_focus=\"val1\"; :row{ :column{label=\""
               col1
               "\";"
             )
             file
 )
 (setq i 0)
 (repeat 7
   (write-line (strcat ":edit_box{label="
                       (vl-prin1-to-string (car (nth i lst)))
                       ";key=\"val"
                       (itoa (setq i (1+ i)))
                       "\";edit_width=10;allow_accept=true;}spacer;"
               )
               file
   )
 )
 (write-line (strcat
               "} :column{label=\""
               col2
               "\";"
             )
             file
 )
 (repeat 10
   (write-line (strcat ":edit_box{label="
                       (vl-prin1-to-string (car (nth i lst)))
                       ";key=\"val"
                       (itoa (setq i (1+ i)))
                       "\";edit_width=10;allow_accept=true;}spacer;"
               )
               file
   )
 )
 (write-line "}}  spacer; ok_cancel; }" file)
 (close file)
 (setq dcl_id (load_dialog temp))
 (if (not (new_dialog "xInputBox" dcl_id))
   (exit)
 )
 (set_tile "box" box)
 (mapcar 'set_tile keys (mapcar 'cdr lst))
 (action_tile
   "accept"
   "(setq res (mapcar 'cons (mapcar 'car lst) (mapcar 'get_tile keys))) (done_dialog)"
 )
 (start_dialog)
 (unload_dialog dcl_id)
 (vl-file-delete temp)
 res
)

Autodesk Architecture 2023 sous windows 11 64

24 pouces vertical + 30 pouces horizontal + 27 pouces horizontal

Lien vers le commentaire
Partager sur d’autres sites

Bonjour PHILPHIL,

 

Ce code me semble fort intéressant !

En revanche, les tableaux devant être mis à jour ne peuvent pas avoir plus de 10 colonnes (et s'ils en ont moins, doit-on alors entrer une largeur de colonne de 0 pour toutes celles qui n'existe pas ?), cela ne risque-t-il pas de créer des erreurs ?

 

Etant donné que tu créer un fichier DCL temporaire, il pourrait être intéressant de créer une boîte de dialogue adapté au tableau que l'on souhaite modifier. :P

 

Loin de moi l'idée de critiquer ce magnifique code, car je pense m'en inspirer fortement pour mes prochains développements !! ^^

 

Bravo à toi (et (gile) bien évidemment) :D

Lien vers le commentaire
Partager sur d’autres sites

hello

 

le tableau doit etre existant

 

10 colonnes pour moi me paraissait deja pas mal, mais il suffit de modifier le lisp pour avoir plus de colonnes

 

le lisp verifie le nombre de colonne dans les tableaux sélectionnés,et ne modifie pas au dela

 

meme si tu rentres une largeur pour la colonne 5 alors que ton tableau n'a que 4 colonne il ne s'occupera pas de ce que tu as entré en colonne 5,6,7,8,9,10 dans la boite de dialogue, mais par contre sauvegardera les données pour plus tard

 

Phil

Autodesk Architecture 2023 sous windows 11 64

24 pouces vertical + 30 pouces horizontal + 27 pouces horizontal

Lien vers le commentaire
Partager sur d’autres sites

  • 3 ans après...

Bonjour et tout d'abord merci pour ce lisp qui fonctionne parfaitement.

Etant une bille en lisp, je voulais savoir si c'était facile d'en créer un concernant la mise en forme avec paramètres fixes d'un tableau issu d'un import depuis Excel ?

Je m'explique : j'ai fréquemment besoin de copier/coller des tableaux depuis Excel vers AutoCAD, jusque là pas de problème (Coller > Collage spécial > Entités AutoCAD), mais une fois le ou les tableaux importés, j'ai de nombreuses manipulations manuelles pour le façonner à mes besoins (voir séquence ci-dessous), je n'ai pas réussi à trouver mon bonheur avec les styles de tableau. J'ajoute en pièces jointes un dwg contenant un tableau brut après collage spécial et un tableau avec mise en forme finale, j'ajoute également le fichier Excel depuis lequel j'ai copié les données, si quelqu'un a des pistes pour un noob comme moi en lisp, je suis preneur 🙂

La séquence manuelle que j'effectue pour mettre en forme mon tableau (l'ordre a son importance) :

1 - Sélection du tableau complet :
    Style de texte = Calibri
    Hauteur du texte = 2.5
    Marge horizontale de la cellule = 1
    Marge verticale de la cellule = 0

2 - Sélection de la colonne A :
    Type de données = Texte
    Alignement = Au milieu au centre
    Largeur de cellule = 15

3 - Sélection de la colonne B :
    Type de données = Nombre entier (message d'alerte à valider)
    Alignement = Au milieu au centre
    Largeur de cellule = 10

4 - Sélection de la colonne C :
    Type de données = Texte
    Alignement = Au milieu au centre
    Largeur de cellule = 34

5 - Sélection de la colonne D :
    Type de données = Texte
    Alignement = Au milieu à gauche
    Largeur de cellule = 160

5 - Sélection de la colonne E :
    Type de données = Texte
    Alignement = Au milieu à gauche
    Largeur de cellule = 110.11

6 - Sélection de la colonne F :
    Type de données = Texte
    Alignement = Au milieu à gauche
    Largeur de cellule = 53

7 - Sélection du tableau complet :
    Hauteur de cellule = 5

 

Cordialement.

Exemple import tableau.dwg Exemple import tableau.xlsx

Lien vers le commentaire
Partager sur d’autres sites

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é