什么情况下vlax-get-property这个函数可用
这几天找了几个引用Excel的程序,但时都出错,找一下,例如以下(defun C:Exl-Open ()
(princ "\n创建一个新的 Excel 电子表格文件...")
(cond
(setq appsession (vlax-create-object "Excel.Application"))
(vlax-invoke-method (vlax-get-property appsession 'WorkBooks) 'open filename)
(if (= (strcase dmode) "SHOW")
(vla-put-visible appsession 1)
(vla-put-visible appsession 0)
);IF
);COND1
);COND
appsession
)
都在(vlax-invoke-method (vlax-get-property appsession 'WorkBooks) 'open filename)这里出问题,
加载运行会出现 这样“ 错误: 参数类型错误: VLA-OBJECT nil”问题,请各位高手帮解决一下!!!
本帖最后由 自贡黄明儒 于 2015-3-26 12:59 编辑
(vlax-property-available-p obj 'Name)验正有这一特性(为T),则可用
试一下(vlax-invoke-method (vlax-get-property appsession 'WorkBooks) 'open filename)=>(vlax-invoke-method appsession 'open filename),未验证 filename没有 自贡黄明儒 发表于 2015-3-26 11:49 static/image/common/back.gif
(vlax-property-available-p obj 'Name)验正有这一特性(为T),则可用
试一下(vlax-invoke-method (vlax ...
还是不行,结果显示为:; 错误: *error* 函数中出错参数类型错误: VLA-OBJECT nil
我把(vlax-invoke-method (vlax-get-property appsession 'WorkBooks) 'open filename)分解开来试了一下,
主要问题在(vlax-get-property appsession 'WorkBooks)这语句上,所以我想问一下:什么情况下vlax-get-property这个函数可用。(我在网上下的所有关于excel的程序都是出现上述错误,我想是我电脑的问题或版本问题)
还有我学二次开发学的不深,不了解“验正”是如何做到的。如果有时间,麻烦帮解决一下,谢谢! 我也碰到了相同的问题,在多台电脑上测试了,大部分可以,个别的无法使用,获取不到对象,到现在还没有解决。是这句(vlax-create-object "Excel.Application"),获取不到对象,返回值为空。你把全部都加上去试试
(setq appxls (vlax-get-or-create-object "excel.application")
xlsworkbooks (vlax-get-property appxls "workbooks")
newbook (vlax-invoke-method xlsworkbooks "add")
newsheet (vlax-get-property newbook "sheets")
newitem (vlax-get-property newsheet "item" 1)
xlscells (vlax-get-property newitem "cells")
) 加上(vl-load-com),试试。 放羊去的 发表于 2015-3-28 11:40 static/image/common/back.gif
我也碰到了相同的问题,在多台电脑上测试了,大部分可以,个别的无法使用,获取不到对象,到现在还没有解决 ...
依然出现:
错误: 函数错误: mahuan1279 发表于 2015-4-4 23:05 static/image/common/back.gif
加上(vl-load-com),试试。
还是出现:
错误: 函数错误: 以处理excel程序是从大师处下来,一个字都没改,但在我这是却是怎么都运行不了
(defun c:readexcel (xls / rtn xlapp xlcls xlcol xlrng xlrow xlsht xlwbk xlwbs i k lst2)
(VL-LOAD-COM)
(setq AcadObject(vlax-get-acad-object)
AcadDocument(vla-get-ActiveDocument AcadObject)
mSpace(vla-get-ModelSpace AcadDocument)
)
(if
(and
(setq xls (findfile xls))
(setq xlapp (vlax-get-or-create-object "excel.application"))
)
(progn
(setq rtn
(vl-catch-all-apply
'(lambda ( /lst row )
(setq xlwbs (vlax-get-propertyxlapp 'workbooks)
xlwbk (vlax-invoke-method xlwbs 'open xls)
xlsht (vlax-get-propertyxlapp 'activesheet)
xlrng (vlax-get-propertyxlsht 'usedrange)
xlcls (vlax-get-propertyxlrng 'cells)
xlrow (vlax-get-propertyxlrng 'rows)
xlcol (vlax-get-propertyxlrng 'columns)
)
(setq i 1)
(setq row (vlax-get-property xlrow 'count))
(repeat row
(setq k 1 lst nil)
(repeat 2
(setq lst
(cons
(vlax-variant-value
(vlax-get-property
(vlax-variant-value
(vlax-get-property xlcls 'item i k)
)
'value
)
)
lst
)
)
(setq k (1+ k))
)
(setq lst (reverse lst))
(if (/= nil (car lst))
(setq lst2 (append lst2 (list lst)))
)
(setq i (1+ i))
)
lst2
)
)
)
(if (= 'vla-object (type xlwbk))
(vl-catch-all-apply 'vlax-invoke-method (list xlwbk 'close :vlax-false))
)
(vl-catch-all-apply 'vlax-invoke-method (list xlapp 'quit))
(foreach obj (list xlcol xlrow xlcls xlrng xlsht xlwbk xlwbs xlapp)
(if (= 'vla-object (type obj))
(vlax-release-object obj)
)
)
(gc)
(if (vl-catch-all-error-p rtn)
(prompt (strcat "\nError: " (vl-catch-all-error-message rtn)))
rtn
)
)
(prompt "\nUnable to interface with Excel Application.")
)
)
页:
[1]