VLISP获取EXCEL_XLS文件对象
(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
(setqexappstr "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文件未打开,则打开并返回对象
这么好的帖子.没人回复.. (defun xtjd:openxls(xls / exappstr fn fn2 fnv newopen)
;返回xls文件对象名称 如xls文件不在支持目录里需加上路径
;全局变量
;*openapp* excel程序开启标记
;*openxls* xls文件开启标记
;*excelapp*excel程序对象
;*xlswbs* xls对象
(defun newopen(file)
;新开XLS文档,并返回打开的xls文件对象名称
(setq *openxls* t) ;xls文件开启标记
(vla-put-visible *excelapp* :vlax-False) ;程序对象不显示
(vlax-invoke-method *xlswbs* "open" file);打开xls文件
)
(if(setq fn(findfile xls))
(progn
;excel程序,下述简称EX
(setqexappstr "Excel.Application")
;判断EX是否打开,打开则返回对象名称
(if(setq *excelapp*(vlax-get-object exappstr))
;EX已打开
(progn
(setq
;获取fn真实对应的文件名称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")
)
;判断文档数目是否为0
(if(zerop(vla-get-count *xlswbs*))
;为0,新开xls文件fn并返回fn的xls对象名
(setq fnv(newopen fn))
;不为0 且获取fn文件对象名失败 则新开fn文件并返回xls对象名
(if(vl-catch-all-error-p(setq fnv(vl-catch-all-apply 'vlax-get-property(list *xlswbs* "item" fn2))))
(setq fnv(newopen fn))
(setq *openxls* nil)
)
)
)
;EX未打开
(setq
*openapp* t ;EX开启标记
*excelapp*(vlax-create-object exappstr) ;创建EX对象
*xlswbs*(vlax-get-property *excelapp* "workbooks") ;workbooks
fnv(newopen fn) ;新开xls文件并返回xls对象名
)
)
)
)
fnv
)
(defun xtjd:openxls-2(xls / exappstr fn fn2 fnv newopen)
;返回xls文件对象名称 如xls文件不在支持目录里需加上路径
;全局变量
;*openapp* excel程序开启标记
;*openxls* xls文件开启标记
;*excelapp*excel程序对象
;*xlswbs* xls对象
(defun newopen(file)
;新开XLS文档,并返回打开的xls文件对象名称
(setq *openxls* t) ;xls文件开启标记
(vla-put-visible *excelapp* :vlax-False) ;程序对象不显示
(vlax-invoke-method *xlswbs* "open" file);打开xls文件
)
(if(setq fn(findfile xls))
(progn
;excel程序,下述简称EX
(setqexappstr "Excel.Application")
;判断EX是否打开,打开则返回对象名称
(if(setq *excelapp*(vlax-get-object exappstr))
;EX已打开
(progn
;已开文档集合
(setq *xlswbs*(vlax-get-property *excelapp* "workbooks"))
;判断文档数目是否为0
(if(zerop(vla-get-count *xlswbs*))
;为0,新开xls文件fn并返回fn的xls对象名
(setq fnv(newopen fn))
;如果文档数目不为0,则对比文档中文件全名(含路径大写)
(progn
;函数应用到所有集合对象
(vlax-map-collection
*xlswbs*
'(lambda(x)
;如果比对成功,则获取fn的xls对象名
(if(eq(strcase(vla-get-FullName x))(strcase fn))
(setq *openxls* nil fnv x)
)
)
)
;如果集中合未找到fn,则新开fn并返回对象名称
(or fnv(setq fnv(newopen fn)))
)
)
)
;EX未打开
(setq
*openapp* t ;EX开启标记
*excelapp*(vlax-create-object exappstr) ;创建EX对象
*xlswbs*(vlax-get-property *excelapp* "workbooks") ;workbooks
fnv(newopen fn) ;新开xls文件并返回xls对象名
)
)
)
)
fnv
)
;例
;(setq newbook(xtjd:openxls "Xtjd_Pgp.Xls"))
;(setq newbook(xtjd:openxls-2 "Xtjd_Pgp.Xls"))
其他xls文件如有打开,关闭时也会跟着一起关闭 有没有lisp读取写入已经打开的excel文件的示例,指教一下。
每次要关掉excel太麻烦 (defun c:aa ()
(if (setq xls (vlax-create-object "excel.application"))
(progn
(vlax-invoke-method (vlax-get-property xls 'WorkBooks) 'Add)
(vla-put-visible xls 1)
(setq aw (vlax-get xls 'ActiveWorkbook)
as (vlax-get aw 'ActiveSheet)
aa (vlax-get-property as "range" "D4")
)
(vlax-put aa 'Formula "中秋节快乐!")
(vlax-put (vlax-get aa 'Borders) 'Value 1) ; 单元格加边框
(vlax-put (vlax-get aa 'Font) 'ColorIndex 3) ; 单元格字体颜色 0自动1红色3绿色6黄
(vlax-put (vlax-get aa 'Interior) 'ColorIndex 6) ; 单元格背景颜色 0自动1红色3绿色6黄
(setq bb (vlax-get (vlax-get (vlax-get as 'usedrange) 'cells)'columns))
(vlax-invoke-method bb 'autofit); 自动调整宽度
)
)
(princ)
)
页:
[1]