明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 2407|回复: 8

[基础] 什么情况下vlax-get-property这个函数可用

[复制链接]
发表于 2015-3-26 11:16:27 | 显示全部楼层 |阅读模式
这几天找了几个引用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),未验证
发表于 2015-3-26 16:44:01 | 显示全部楼层
filename没有
 楼主| 发表于 2015-3-27 16:34:48 | 显示全部楼层
自贡黄明儒 发表于 2015-3-26 11:49
(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")
    )
发表于 2015-4-4 23:05:51 | 显示全部楼层
加上(vl-load-com),试试。
 楼主| 发表于 2015-4-8 14:16:04 | 显示全部楼层
放羊去的 发表于 2015-3-28 11:40
我也碰到了相同的问题,在多台电脑上测试了,大部分可以,个别的无法使用,获取不到对象,到现在还没有解决 ...

依然出现:
         错误: 函数错误:
 楼主| 发表于 2015-4-8 14:17:01 | 显示全部楼层
mahuan1279 发表于 2015-4-4 23:05
加上(vl-load-com),试试。

还是出现:
      错误: 函数错误:
 楼主| 发表于 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-property  xlapp 'workbooks)
                              xlwbk (vlax-invoke-method xlwbs 'open xls)
                              xlsht (vlax-get-property  xlapp 'activesheet)
                              xlrng (vlax-get-property  xlsht 'usedrange)
                              xlcls (vlax-get-property  xlrng 'cells)
                              xlrow (vlax-get-property  xlrng 'rows)
                              xlcol (vlax-get-property  xlrng '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.")
    )
)
您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|CAD论坛|CAD教程|CAD下载|联系我们|关于明经|明经通道 ( 粤ICP备05003914号 )  
©2000-2023 明经通道 版权所有 本站代码,在未取得本站及作者授权的情况下,不得用于商业用途

GMT+8, 2025-5-23 11:00 , Processed in 0.184966 second(s), 26 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表