수고하십니다.
엑셀에서 만든 수식으로 계산 한 값을 LISP에서 변수값으로 사용을 하고자 하는데. 첨부한 LISP은 마지막 열만 리스트로 리턴을 합니다.
이걸 전체 다 리스트로 받는 방법이 없을까요..
A1, B1, C1, D1 에서 A28, B28, C28, D28 까지를 “gear_list” 에 저장을 하고자 합니다.
(defun c:excel_to_lisp ()
(setq sheetname “CAD_OUT”);; 엑셀의 시트 이름
(vl-load-com)
(if (null msxc-xl24HourClock)
(vlax-import-type-library
:tlb-filename
“C:/Program Files/Microsoft Office/OFFICE12/XL5EN32.OLB”
:methods-prefix
“msxm-“
:properties-prefix
“msxp-“
:constants-prefix
“msxc-“
)
)
(setq *msx* (vlax-get-or-create-object “Excel.Application.12”))
(if (/= nil *msx*)
(progn
(setq *sheets* (vlax-get-property *msx* ‘Sheets))
(setq *worksheet* (vlax-get-property *sheets* ‘Item sheetname))
(msxm-activate *worksheet*)
(setq *range* (vlax-get-property *worksheet* ‘UsedRange))
(setq *columns* (vlax-get-property *range* ‘columns))
(setq col_cnt (vlax-get-property *columns* ‘count))
(setq *rows* (vlax-get-property *range* ‘rows))
(setq row_cnt (vlax-get-property *rows* ‘count))
;; 1행1열(A1) 부터 col_cnt, row_cnt 까지 반복한다..
(progn
(setq row 1)
(setq gear_list (list))
(repeat row_cnt
(setq col 1)
(setq gear_list_X (list)) ;한 행의 list
;; 한 행의 list 추출한다..
(repeat col_cnt
(setq newrange (vlax-get-property *range* ‘Item row col))
(setq *newrange2* (vlax-variant-value newrange))
(setq cellValue (vlax-variant-value
(vlax-get-property
*newrange2*
‘value
xlRangeValueDefault
)
)
)
(setq gear_list_X (append gear_list_X (list cellValue)))
(setq col (1+ col))
);; repeat col_cnt
(setq row (1+ row))
);; repeat row_cnt
(setq gear_list (append gear_list (list gear_list_X)))
);; (progn
);; (if (/= nil *msx*) (progn
);; (if (/= nil *msx*)
(vlax-release-object *msx*)
(vlax-release-object *sheets*)
(vlax-release-object *worksheet*)
(vlax-release-object *columns*)
(vlax-release-object *rows*)
(vlax-release-object *newrange2*)
(princ)
)