OB2 Posté(e) le 4 novembre 2009 Posté(e) le 4 novembre 2009 Bonsoir a tous! Petite question sur la liaison Autocad/Excel en utilisant VisuaLisp. Comment selectionner une cellule excel depuis autocad en la referençantpar ses indexs(Numeros) de ligne et de colonne et nom pas par son nom "alphabetique"du style "D12" ???? Par exemple ne pas ecrire :;;(setq cellule (vlax-Get-Property feuille 'range "B6"));;;selectionne la cellule B6 mais plutot un truc du style:;;(setq cellule (vlax-Get-Property feuille 'cells (2 . 6));;;selectionne la cellule B6 avec B=2. Merci d'avance pour vos reponses!!
Tramber Posté(e) le 5 novembre 2009 Posté(e) le 5 novembre 2009 (setq cellule (vlax-Get-Property feuille 'cells (strcat(chr(+ 64 2))(itoa 6)))) Et arpès le Z, comment on fait ?Ben on pousse un peu sa programmation.... Bureau d'études dessin. Spécialiste Escaliers Développement - Formation ./__\. (.°=°.)
OB2 Posté(e) le 5 novembre 2009 Auteur Posté(e) le 5 novembre 2009 Bonjour,Merci , Tramber pour votre reponse, mais en fait je voulais savoirsi il existait une syntaxe "directe" sans justement faire des conversions et des concatenations et autres..?? Je ne sais pas si c'est effectivement possible, mais je trouve etonnant que des positionsde colones (pour les lignes ca va!) doivent etre indiquées par des caracteres alphabetiqueset non pas pas des valeurs numeriques. (comme c'est le cas pour des "safearray" ou des tableaux Autocad "ACAD_TABLE'.) Si ce n'est pas possible, eh bien on poussera un peu la programmation (j'ai vu des exemplesde code pour le faire, mais je l'ecrirai juste pour dire ""c'est moi qui l'ai fait''). Merci encore! .
(gile) Posté(e) le 5 novembre 2009 Posté(e) le 5 novembre 2009 Salut, J'avais écrit ça pour le GetExcel de Terry Miller ;;------------------------------------------------------------------------------- ;; ColumnRow - Retourne une liste des indices de colonne et rangée ;; Function By: Gilles Chanteau from Marseille, France ;; Arguments: 1 ;; Cell$ = Référence de la cellule ;; Exemple de syntaxe : (ColumnRow "IV987") = '(256 987) ;;------------------------------------------------------------------------------- (defun ColumnRow (Cell$ / Column$ Char$ Row#) (setq Column$ "") (while ( (setq Column$ (strcat Column$ Char$) Cell$ (substr Cell$ 2) ) ) (if (and (/= Column$ "") (numberp (setq Row# (read Cell$)))) (list (Alpha2Number Column$) Row#) '(1 1) ;_ default to "A1" if there's a problem ) ) ;;------------------------------------------------------------------------------- ;; Alpha2Number - Convertit une chaîne alphabétique en nombre entier ;; Function By: Gilles Chanteau from Marseille, France ;; Arguments: 1 ;; Str$ = Chaîne à convertir ;; Exemple de syntaxe : (Alpha2Number "BU") = 73 ;;------------------------------------------------------------------------------- (defun Alpha2Number (Str$ / Num#) (if (= 0 (setq Num# (strlen Str$))) 0 (+ (* (- (ascii (strcase (substr Str$ 1 1))) 64) (expt 26 (1- Num#)) ) (Alpha2Number (substr Str$ 2)) ) ) ) ;;------------------------------------------------------------------------------- ;; Number2Alpha - Convertit un nombre entier en chaîne alphabétique ;; Function By: Gilles Chanteau from Marseille, France ;; Arguments: 1 ;; Num# = Nombre à convertir ;; Exemple de syntaxe : (Number2Alpha 73) = "BU" ;;------------------------------------------------------------------------------- (defun Number2Alpha (Num# / Val#) (if ( (chr (+ 64 Num#)) (if (= 0 (setq Val# (rem Num# 26))) (strcat (Number2Alpha (1- (/ Num# 26))) "Z") (strcat (Number2Alpha (/ Num# 26)) (chr (+ 64 Val#))) ) ) ) Gilles Chanteau - gileCAD - GitHub Développements sur mesure pour AutoCAD
Tramber Posté(e) le 5 novembre 2009 Posté(e) le 5 novembre 2009 Bonjour,Merci , Tramber pour votre reponse, mais en fait je voulais savoirsi il existait une syntaxe "directe" sans justement faire des conversions et des concatenations et autres..?? Ben sur Vlisp non !Mais j'ajoute que Excel se configure avec L1C1 au lieu de A1 !. A tester En tout cas (gile) t'as donné ce qu'il faudrait pour tout traiter sur la base de la fonction chr Bureau d'études dessin. Spécialiste Escaliers Développement - Formation ./__\. (.°=°.)
Patrick_35 Posté(e) le 5 novembre 2009 Posté(e) le 5 novembre 2009 Salut Vous pouvez aussi faire (vlax-get (vlax-get-property feuille 'range "A1") 'value2)sans utiliser L1C1 @+ Les Lisps de PatrickLe but n'est pas toujours placé pour être atteint, mais pour servir de point de mire.Joseph Joubert, 1754-1824
OB2 Posté(e) le 5 novembre 2009 Auteur Posté(e) le 5 novembre 2009 Bonsoir a vous! Merci pour toutes ces reponses (rapides) En reponse a Patrick_35, c'est justement ce que je ne veux pas ecrire!Pas de lettres, que des chiffres.Mais a priori ce n'est pas possible sans faire des conversions (si j'ai bien compris). Concernant la remarque de Tramber sur le style d'affichage des cellulues dans excel, j'ai bienessayé de changer cette option mais a priori ca ne change pas le type de données a envoyer a excel depuis Autocad (ou alors je n'ai pas trouvé la bonne syntaxe). Je reste quand meme septique sur le fait de ne pas pouvoir "referencer" une cellule par desindex (en utilisant le NUMERO de colone et le NUMERO de ligne).Cela peut il etre different en chargant la bibliotheque Excel ?? en utilisant d'autres fonctions ?? Merci aussi a Gile si jamais je pert patience dans mes recherches, je n'hesitrait pas a m'inspirer de son code.
OB2 Posté(e) le 5 novembre 2009 Auteur Posté(e) le 5 novembre 2009 J'AI TROUVE (ca merite bien de le crier)!!!!!!!!! Je vous met la copie de la console visualisp: Le nom des variable est suffisement explicite.Notez que le numero de ligne est en premier et le deuxieme est le numero de la colone. (setq Liste_des_feuilles (vlax-get Classeur 'sheets)) (setq feuille (vlax-Get-Property Liste_des_feuilles 'Item 2))#_$ (setq liste_des_cellules (vlax-Get-Property feuille 'cells))#_$ (setq cellule (vlax-Get-Property liste_des_cellules 'item 4 3))#_$ (setq cellule (vlax-variant-value cellule))#_$ (vlax-put-property cellule 'value2 "ESSAI")nil_$ ca marche!!!!! La propriété 'Item d'une liste de cellule accepte deux arguments LIGNE , COLONE (4 et 3 dans mon cas) ce qui renvoi la cellule C4 comme valeur d'un variant. C'etait tellement simple (ca va eviter a beaucoup de lancer des routines de conversions) A+ (et merci encore)
Tramber Posté(e) le 6 novembre 2009 Posté(e) le 6 novembre 2009 Allelouhia (tiens je ne sais même pas comment on l'écrit). A retenir. Bureau d'études dessin. Spécialiste Escaliers Développement - Formation ./__\. (.°=°.)
Messages recommandés
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 compteSe connecter
Vous avez déjà un compte ? Connectez-vous ici.
Connectez-vous maintenant