- (defun xtjd:openxls(xls / exappstr fn fn2 fnv newopen)
- ;返回xls文件对象名称 如xls文件不在支持目录里需加上路径
- ;全局变量
- ;*openapp* excel程序开启标记
- ;*openxls* xls文件开启标记
- ;*excelapp* excel程序对象
- ;*xlswbs* xls对象称
- (defun newopen()
- ;新开XLS文档,并返回打开的xls文件对象名称
- (setq *openxls* t) ;xls文件开启标记
- (vla-put-visible *excelapp* :vlax-False) ;程序对象不显示
- (vlax-invoke-method *xlswbs* "open" fn) ;打开xls文件
- )
- (if(setq fn(findfile xls))
- (progn
- (setq exappstr "Excel.Application") ;excel程序,下述简称EX
- (if(setq *excelapp*(vlax-get-object exappstr)) ;EX已打开 返回对象名称
- (progn ;EX已打开
- (setq ;fn2 = 与实际文件名称大小写一致
- fn2(car(vl-directory-files(vl-filename-directory fn)(strcat(vl-filename-base fn)(vl-filename-extension fn))1))
- *xlswbs*(vlax-get-property *excelapp* "workbooks") ;已打开的文档集合
- )
- (if(zerop(vla-get-count *xlswbs*))
- (setq fnv(newopen)) ;打开的文档数目=0 则新开xls文件并返回xls对象名
- ;打开的文档数目>0 获取xls文件的对象名失败 则新开xls文件并返回xls对象名
- (if(vl-catch-all-error-p(setq fnv(vl-catch-all-apply 'vlax-get-property(list *xlswbs* "item" fn2))))
- (setq fnv(newopen))
- (setq *openxls* nil)
- )
- )
- )
- (setq
- *openapp* t ;EX开启标记
- *excelapp*(vlax-create-object exappstr) ;创建EX对象
- *xlswbs*(vlax-get-property *excelapp* "workbooks") ;workbooks
- fnv(newopen) ;新开xls文件并返回xls对象名
- )
- )
- )
- )
- fnv
- )
- ;例
- ;(setq newbook(xtjd:openxls "Xtjd_Pgp.Xls"))
- ;关闭excel
- (defun xtjd:CloseExcel()
- ;如需保存建议先用(vla-save newbook)
- (if *openxls*(vlax-invoke-method newbook 'Close :vlax-False)) ;不保存关闭XLS文件
- (if *openapp*(vlax-invoke-method *excelapp* 'QUIT)) ;EX新开,则关闭EX
- (mapcar 'vlax-release-object (list *excelapp* *xlswbs*)) ;释放对象
- )
VLISP获取EXCEL_XLS文件对象
xls文件已经打开,直接返回xls对象
xls文件未打开,则打开并返回对象
|