lyt0623 发表于 2015-3-26 11:16:27

什么情况下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 11:49:24

本帖最后由 自贡黄明儒 于 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),未验证

cabinsummer 发表于 2015-3-26 16:44:01

filename没有

lyt0623 发表于 2015-3-27 16:34:48

自贡黄明儒 发表于 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的程序都是出现上述错误,我想是我电脑的问题或版本问题)
还有我学二次开发学的不深,不了解“验正”是如何做到的。如果有时间,麻烦帮解决一下,谢谢!

放羊去的 发表于 2015-3-28 11:40:21

我也碰到了相同的问题,在多台电脑上测试了,大部分可以,个别的无法使用,获取不到对象,到现在还没有解决。是这句(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")
    )

mahuan1279 发表于 2015-4-4 23:05:51

加上(vl-load-com),试试。

lyt0623 发表于 2015-4-8 14:16:04

放羊去的 发表于 2015-3-28 11:40 static/image/common/back.gif
我也碰到了相同的问题,在多台电脑上测试了,大部分可以,个别的无法使用,获取不到对象,到现在还没有解决 ...

依然出现:
         错误: 函数错误:

lyt0623 发表于 2015-4-8 14:17:01

mahuan1279 发表于 2015-4-4 23:05 static/image/common/back.gif
加上(vl-load-com),试试。

还是出现:
      错误: 函数错误:

lyt0623 发表于 2015-4-8 14:41:10

以处理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]
查看完整版本: 什么情况下vlax-get-property这个函数可用