Aller au contenu

Cellules Excel


OB2

Messages recommandés

Bonsoir a tous!

 

Petite question sur la liaison Autocad/Excel en utilisant VisuaLisp.

 

Comment selectionner une cellule excel depuis autocad en la referençant

par 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!!

 

 

 

Lien vers le commentaire
Partager sur d’autres sites

Bonjour,

Merci , Tramber pour votre reponse, mais en fait je voulais savoir

si 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 positions

de colones (pour les lignes ca va!) doivent etre indiquées par des caracteres alphabetiques

et 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 exemples

de code pour le faire, mais je l'ecrirai juste pour dire ""c'est moi qui l'ai fait'').

 

 

Merci encore!

 

.

 

 

Lien vers le commentaire
Partager sur d’autres sites

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

Lien vers le commentaire
Partager sur d’autres sites

Bonjour,

Merci , Tramber pour votre reponse, mais en fait je voulais savoir

si 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

 

./__\.
(.°=°.)
Lien vers le commentaire
Partager sur d’autres sites

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 bien

essayé 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 des

index (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.

Lien vers le commentaire
Partager sur d’autres sites

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)

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é