달수가 생각하는 VisualLISP 과 Excel 연동 2
;;;************************************************************************* ;;; 설 명: 엑셀 로딩 ;;; 사 용 법: (setq ExcelApp (subLoadExcel)) ;;;************************************************************************* (defun subLoadExcel (/ excelPath) (if (and (setq excelPath (vl-registry-read (strcat "HKEY_LOCAL_MACHINE\\SOFTWARE\\Microsoft\\Windows" "\\CurrentVersion\\App Paths\\Excel.exe" ) "Path" ) ) (setq excelPath (strcat excelPath "Excel.exe")) ) (progn (if (not msxl-acos) (vlax-import-type-library :tlb-filename excelPath :methods-prefix "msxl-" :properties-prefix "msxl-" :constants-prefix "msxl-" ) ) (setq ExcelApp (vlax-get-or-create-object "Excel.Application")) ) ) ExcelApp )
(setq ExcelApp (subLoadExcel)) (vlax-put Excelapp "visible" :vlax-true) (setq Workbooks (vlax-get-property ExcelApp 'Workbooks)) (setq CurrentWBook (vlax-invoke-method Workbooks 'Add)) (setq Sheets (vlax-get-property ExcelApp 'Sheets)) (setq AcSheet (vlax-get-property ExcelApp 'ActiveSheet)) (setq Cells (vlax-get-property AcSheet 'Cells)) (setq Sha (vlax-get-property AcSheet 'Shapes))
;그림화일지정 (setq fileName (getfiled "Select Pciture file to read :" (getvar "dwgprefix") "bmp" 8))
;셀의 위치를 C3으로 지정 (setq colY 3 rowX 3) ;<- 3,3은 C3 (setq cel (vlax-variant-value (vlax-get-property Cells 'Item colY rowX)))
;현재셀의 위치을 읽어옴(그림 삽입위치) (setq top (vlax-variant-value (vlax-get-property cel 'Top))) ;시트 상단에서 떨어진 거리 (setq left (vlax-variant-value (vlax-get-property cel 'Left))) ;시트 좌측에서 떨어진 거리
;현재셀의 폭과 높이를 읽어옴 (setq wid (vlax-variant-value (vlax-get-property cel 'Width))) ;폭 (setq hei (vlax-variant-value (vlax-get-property cel 'Height))) ;높이
;그림삽입 (vlax-invoke-method Sha 'AddPicture fileName :vlax-True :vlax-True left top wid hei)
;엑셀에 대한 객체,메쏘드,특성 등이 낯설다보니 공부를 하게 되었습니다. ;VBA를 모르는넘이 이 답변을 하는 이유는 ;ActiveX 대한 개념만 어느정도 있으면 한번도 안해본것도 가능하게 할 수 있다는것을 ;보여주기 위함입니다. 그런데 엑셀은 method하고 property가 무지 많군요..
위의 구문중...(vlax-import!-type-library <- 여기에서 import 뒤에 ! <- 느낌표가 자동으로 생기네요..
그림화일대신 다른프로그램 화일을 선택한 후에 위의 구문중 그림삽입대신 아래문구를 사용하면 OLE객체가 들어갑니다.
메서드의 옵션은 엑셀에서 정해진거라..제가 찾아내는거보다 엑셀 vba하시는분들이 더 잘 알듯합니다^^ |
출처 : 아키모아 달수 http://cafe.daum.net/archimore/IP9e/60
'Auto CAD > lisp' 카테고리의 다른 글
VLA-GetBoundingBox (Entity의 좌하 우상 좌표) (2) | 2019.04.04 |
---|---|
달수가 생각하는 VisualLISP 과 Excel 연동 1 (0) | 2019.04.04 |
TGK - 태극기 그리기 (0) | 2019.02.04 |
Extended Entity Data (0) | 2019.01.26 |
SetTextHeight Method (ActiveX) (0) | 2019.01.23 |