kekseksa Posté(e) le 23 mars 2009 Posté(e) le 23 mars 2009 bonjour voici un bout de code que j'ai placé dans acaddoc.lsp (defun vlx-Open-Excel9-Exist (xfile dmode / appsession) (cond ((setq appsession (vlax-Create-Object "Excel.Application")) (vlax-invoke-Method (vlax-Get-Property appsession 'WorkBooks) 'Open ;xfile (findfile xfile) ) ;_ end of vlax-invoke-Method (if (= (strcase dmode) "SHOW") (vla-Put-Visible appsession 1) (vla-Put-Visible appsession 0) ) ;_ end of if ) ) ;_ end of cond appsession ) (defun vlx-Excel-Quit (appsession) (vlax-Invoke-Method appsession 'QUIT) (if (vlax-Property-Available-p appsession 'Visible) (princ "\n<<< Excel est encore actif !!! >>>") ;(princ "\n<<< Excel vient d'être fermé >>>.") ) ;_ end of if ) (defun vlx-Excel-Put-CellValue2 (row col valeur) (xlp-Put-Value2 (vlx-Excel-Get-Cell (xlp-Get-ActiveSheet excelapp) row col ) ;_ end of vlxx-Excel-Get-Cell (vlax-Make-Variant valeur) ) ;_ end of msxl-Get-Value ) (defun vlx-Excel-Get-Cell (rng relrow relcol) (vlax-Variant-Value (xlp-Get-Item (xlp-Get-Cells rng) ; rng est un VLA-object représentant la feuille active du classeur actif (vlax-Make-Variant relrow) ; relrow est un nombre représentant le numéro de ligne (vlax-Make-Variant relcol) ; relcol est un nombre représentant le numéro de colonne ) ;_ end of excelp-Get-Item ) ;_ end of vlax-Variant-Value ) (defun test (/ valeur nomdufichier excelapp excelsheet fichierexcel excel_version) (setq fichierexcel "C:/test.xls" excelapp (vlx-Open-Excel9-Exist fichierexcel "hide") excelsheet (vlax-get excelapp "Sheets") ) (vlx-Excel-Put-CellValue2 1 1 "ok") (vla-save (vlax-get excelapp "ActiveWorkbook")) (vlx-Excel-Quit excelapp) ) (test) mon problème : comment faire pour vérifier que "test.xls" ne soit pas en lecture seulecar si j'ouvre 2 sessions autocad , alors l'une d'elles ouvrira "test.xls" en lecture seule de plus , le (vla-save (vlax-get excelapp "ActiveWorkbook")) ne me plait pas , car il enregistre le classeur actif sans faire référence à son nom et répertoire quelqu'un a t-il une idée
(gile) Posté(e) le 23 mars 2009 Posté(e) le 23 mars 2009 Salut, Regarde GetExcel (Terry Miller), la solution adoptée dans la routine OpenExcel est de fermer toutes les feuilles Excel ouvertes avant d'ouvrir celle appelée par le LISP. Gilles Chanteau - gileCAD - GitHub Développements sur mesure pour AutoCAD
Patrick_35 Posté(e) le 23 mars 2009 Posté(e) le 23 mars 2009 Salut Pour vérifier un fichier, tu fais un (open "Mon_fichier" "a") et si tu as nil comme retour, c'est qu'il est en lecture seul. Ensuite, pour faire la vérif que le fichier n'est pas déjà ouvert dans Excel, je fais (defun lancer_excel(/ sel) (setq xl (vlax-get-or-create-object "Excel.Application")) (setq wks (vlax-get xl 'Workbooks)) (vlax-for sel wks (setq liste_fichiers_ouvert (cons (strcase (vlax-get sel 'fullname)) liste_fichiers_ouvert)) ) ) et je regarde dans la liste liste_fichiers_ouvert. (vla-save (vlax-get excelapp "ActiveWorkbook")) Pour Sauvegarder, je ferme directement mon fichier de cette manière Sauvegarder (vlax-invoke-method Mon_Fichier_Xls 'close :vlax-true) ou pas (vlax-invoke-method Mon_Fichier_Xls 'close :vlax-false) @+ Les Lisps de PatrickLe but n'est pas toujours placé pour être atteint, mais pour servir de point de mire.Joseph Joubert, 1754-1824
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