找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 2890|回复: 9

[讨论]:vlisp-excel函数的修改

[复制链接]
发表于 2007-1-6 13:32:49 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?立即注册

×
近日想编一个CAD与EXCEL之间进行数据传递的程序。直接采用了网站上提供的源代码。的确省去了不少的麻烦。但是在使用中也发现了问题,比如(vlxls-range-getid RangeObject)函数,按照作者的示例可以用来返回在EXCEL中所选定单元格范围的ID,但是在实际应用中该函数出现错误无法正常使用。经反复跟踪调试发现实由于作者提供的代码有一定的问题,经改动以后得到了正确的结果。

更改以后的函数代码如下:调试的环境是winxp-sp2+autocad2006+office2007简体中文版。有兴趣的朋友可以试一下。

  1.   [FONT=courier new]
  2. (Defun vlxls-range-getID (range / col row dx dy);;;;返回指定单元格范围的ID
  3.   (setq        dx  (vlxls-get-property range "Rows.Count")
  4.         dy  (vlxls-get-property range "Columns.Count")
  5.         row (vlxls-get-property range "Row")
  6.         col (vlxls-get-property range "Column")
  7. ;;;以下注释的代码为原作者所提供,调试中无法通过。MergeArea仅能用于单个单元格       
  8. ;;;  (setq        dx  (vlxls-get-property range "MergeArea.Rows.Count")
  9. ;;;        dy  (vlxls-get-property range "MergeArea.Columns.Count")
  10. ;;;        row (vlxls-get-property range "MergeArea.Row")
  11. ;;;        col (vlxls-get-property range "MergeArea.Column")       
  12.   )
  13.   (strcat (vlxls-rangeid (list col row))
  14.           ":"
  15.           (vlxls-rangeid (list (1- (+ col dy)) (1- (+ row dx))))
  16.   )
  17. )
  18.   [/FONT]
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
发表于 2007-1-8 10:27:09 | 显示全部楼层
谢谢指出,编完后,很久没有用,也没有再测试过。修正后的函数如下, 可以同时处理单个或合并的单元格。

  1. (Defun vlxls-range-getID (range / str col row dx dy)
  2.   (if (equal (vlxls-get-property range "mergecells") :vlax-true)
  3.     (setq str "MergeArea.")
  4.     (setq str "")
  5.   )
  6.   (setq        dx  (vlxls-get-property range (strcat str "Rows.Count"))
  7.         dy  (vlxls-get-property range (strcat str "Columns.Count"))
  8.         row (vlxls-get-property range (strcat str "Row"))
  9.         col (vlxls-get-property range (strcat str "Column"))
  10.   )
  11.   (strcat (vlxls-rangeid (list col row))
  12.           ":"
  13.           (vlxls-rangeid (list (1- (+ col dy)) (1- (+ row dx))))
  14.   )
  15. )
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

 楼主| 发表于 2007-1-23 22:51:05 | 显示全部楼层
感谢你的及时更改。同时希望看到你在这方面更多精彩的发布。
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2007-1-26 07:42:46 | 显示全部楼层
交流、学习、探索。
两位是榜样!
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2007-7-5 14:01:03 | 显示全部楼层
cad与excel互相传递写数据,读数据都已经不难,但是怎么用lisp来控制excel单元格的格式,倒是好像还没有人弄出花样来,比如合并单元格,设置对其方式,设置单元格背景颜色,字体等等,希望在店研究出来。
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2007-8-20 06:37:06 | 显示全部楼层
最初由 mmmm 发布
[B]谢谢指出,编完后,很久没有用,也没有再测试过。修正后的函数如下, 可以同时处理单个或合并的单元格。
[code]
(Defun vlxls-range-getID (range / str col row dx dy)
  (if (equal (vlxls-get-property range ... [/B]


请问您的
vlxls-range-getID 函数,为何加上了
(if (equal (vlxls-get-property range range "mergecells") :vlax-true)
(setq str "MergeArea.")
(setq str "")
)
就会返回 ; 错误: 引数太多
但如果没有这段就正常了
另外如果单独设置
(setq top range)
(setq prop range)

则您的函数程序
为何在

(cond  ((= (type prop) 'sym)

        (setq Rtn (vlax-get-property top prop))

       )

       ((= (type prop) 'str)

        (if (null (vl-string-search "." prop))

          (setq Rtn (vlax-get-property top prop))

          (foreach item (vlstring->list prop ".")

            (if (null Rtn)

              (setq Rtn (vlax-get-property top item))

              (setq Rtn (vlax-get-property Rtn item))

            )

          )

        )

       )

  )

  (cond  ((= (type Rtn) 'variant)

        (setq Rtn (vlax-variant-value Rtn))

       )

       ((= (type Rtn) 'safearray)

        (setq Rtn (vlxls-variant->list Rtn))

       )

  )      


都没有反应
是否出错了呢???
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2007-8-20 12:10:52 | 显示全部楼层
==> (vlxls-get-property range range "mergecells")
应该只有一个Range (vlxls-get-property range "mergecells")
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2007-8-23 09:28:35 | 显示全部楼层
多谢2楼的及时修改!
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 488个

财富等级: 日进斗金

发表于 2007-8-28 00:30:38 | 显示全部楼层
为什么不在cad里直接 插入excel 物体?
效果也不错呀!
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2007-8-28 22:29:52 | 显示全部楼层
2006版本插入excel有限制,太大了会丢失部分信息。2006版本以上没有试
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|申请友链|Archiver|手机版|小黑屋|辽公网安备|晓东CAD家园 ( 辽ICP备15016793号 )

GMT+8, 2024-9-23 12:19 , Processed in 0.189826 second(s), 49 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

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