달수가 생각하는 VisualLISP 과 Excel 연동 2

Auto CAD/lisp|2019. 4. 4. 11:06

 

    ;;;*************************************************************************

    ;;;     : 엑셀 로딩

    ;;;   : (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객체가 들어갑니다.
(vlax-invoke-method Sha 
'AddOLEObject
:null fileName :vlax-True :vlax-False :vlax-False :vlax-False :vlax-False left top wid hei
)

 

메서드의 옵션은 엑셀에서 정해진거라..제가 찾아내는거보다 엑셀 vba하시는분들이 더 잘 알듯합니다^^
AcitiveX에서는 (vlax-invoke-method 객체 '함수 옵션) <- vlax-invoke-method 함수로 쓰인거고....
<객체 함수 옵션>은 엑셀에서 정해진거니깐요..

출처 : 아키모아 달수 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

댓글()