找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 4325|回复: 39

[已解决] 需要一个检测有没有安装微软的excel的函数

[复制链接]

已领礼包: 3199个

财富等级: 富可敌国

发表于 2014-11-16 13:59:15 | 显示全部楼层 |阅读模式
悬赏20D豆已解决
需要一个检测有没有安装微软的excel的函数,想放在程序开头,假入没有安装microsoft excel ,则提示,后面的程序不执行
假如装了其它的,如wps 之类的,是没有用的。即使装了wps 而没有装microsoft office ,就要提示,并中断后面程序执行。

最佳答案

查看完整内容

怎么不好了,你象上面的方法设置个全局变量啊,这个全局变量在你程序初始化时候设置,中间你用的时候要是这个值为NIL,那么就说明没装,如果有值,你就让你的程序继续进行。保证只打开一次。全局变量是你自己管理的啊,你自己忘了那就别说了。 你要只临时知道是否装了EXCEL,那就就写个函数,不过这样你每次用都用打开下EXCEL对象,费时间哦,不如上面的用全局变量保存,你只打开一次EXCEL判断。 ...
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!

已领礼包: 40个

财富等级: 招财进宝

发表于 2014-11-16 13:59:16 | 显示全部楼层
lucas3 发表于 2014-11-16 16:06
这个方法不好吧,用创建不成功来判断?创建不成功,会err的, 时间久了,会忘掉的,到时就不知道这个err ...

怎么不好了,你象上面的方法设置个全局变量啊,这个全局变量在你程序初始化时候设置,中间你用的时候要是这个值为NIL,那么就说明没装,如果有值,你就让你的程序继续进行。保证只打开一次。全局变量是你自己管理的啊,你自己忘了那就别说了。

你要只临时知道是否装了EXCEL,那就就写个函数,不过这样你每次用都用打开下EXCEL对象,费时间哦,不如上面的用全局变量保存,你只打开一次EXCEL判断。

  1. (defun XD::Excel:isInstalled ( / obj)
  2.   (and
  3.     (setq obj (vlax-get-or-create-object "Excel.Application"))
  4.     (vlax-release-object obj)
  5.     t
  6.   )
  7. )


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

使用道具 举报

已领礼包: 40个

财富等级: 招财进宝

发表于 2014-11-16 14:40:03 | 显示全部楼层
去开源函数库论坛看看前几天的几个EXCEL函数,你创建EXCEL Application对象,如果不成,就是没装呗

部分代码


命令: (if (not **XD::Excel**)
(_>     (setq **XD::Excel** (vlax-get-or-create-object "Excel.Application"))
(_>   )
#<VLA-OBJECT _Application 00ed37dc>


点评

newer版主,您好,太笨,一下子消化不了,我需要像下面这样,如果安装了就继续执行,没有安装就不执行并提示,要怎么改呢?  详情 回复 发表于 2014-11-16 16:51
这个方法不好吧,用创建不成功来判断?创建不成功,会err的, 时间久了,会忘掉的,到时就不知道这个err是什么问题了  详情 回复 发表于 2014-11-16 16:06
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复

使用道具 举报

已领礼包: 3199个

财富等级: 富可敌国

 楼主| 发表于 2014-11-16 16:06:58 | 显示全部楼层
newer 发表于 2014-11-16 14:40
去开源函数库论坛看看前几天的几个EXCEL函数,你创建EXCEL Application对象,如果不成,就是没装呗

部分 ...

这个方法不好吧,用创建不成功来判断?创建不成功,会err的, 时间久了,会忘掉的,到时就不知道这个err是什么问题了

点评

怎么不好了,你象上面的方法设置个全局变量啊,这个全局变量在你程序初始化时候设置,中间你用的时候要是这个值为NIL,那么就说明没装,如果有值,你就让你的程序继续进行。保证只打开一次。全局变量是你自己管理的  详情 回复 发表于 2014-11-16 16:23
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复

使用道具 举报

已领礼包: 3199个

财富等级: 富可敌国

 楼主| 发表于 2014-11-16 16:51:24 | 显示全部楼层
newer 发表于 2014-11-16 14:40
去开源函数库论坛看看前几天的几个EXCEL函数,你创建EXCEL Application对象,如果不成,就是没装呗

部分 ...

newer版主,您好,太笨,一下子消化不了,我需要像下面这样,如果安装了就继续执行,没有安装就不执行并提示,要怎么改呢?

  1. (defun c:ww (/ 1p 2p _l d ang 3p 4p 5p 6p 7p 8p 9p 10p 11p)
  2. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  3.   (if (>= (atof (getvar 'ACADVER)) 18.2);; "16.1" AutoCAD 2005
  4.      (progn;; if test returns T
  5. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  6.   (if (and (setq 1p (getpoint "\n指定第一点:"))
  7.            (setq 2p (getpoint "\n 指定第二点 :" 1p))
  8.            (if (<= (setq d (distance 1p 2p)) 5.)
  9.              (progn (alert "两点之间的距离必须超过5个单位 ") nil)
  10.              t
  11.            )
  12.       )
  13.     (progn (defun _l (j k) (entmake (list '(0 . "LINE") (cons 10 j) (cons 11 k))))
  14.            (setq 3p  (polar 1p (+ (setq ang (angle 1p 2p)) (* pi 0.5)) 4.5)
  15.                  4p  (polar 3p (+ ang (* pi 1.5)) 9.)
  16.                  5p  (polar 4p ang 5.)
  17.                  6p  (polar 5p (+ ang (* pi 0.5)) 9.)
  18.                  7p  (polar 5p (angle 5p 6p) 1.75)
  19.                  8p  (polar 7p ang (- d 5.))
  20.                  9p  (polar 8p (angle 5p 6p) 5.5)
  21.                  10p (polar 9p (+ ang pi) (- d 5.))
  22.            )
  23.            (mapcar '_l (list 4p 5p 7p 9p 6p) (list 5p 6p 8p 10p 3p))
  24.     )
  25.   )
  26.   (princ)
  27. )
  28. ;;;;;;;;;;;;;;;;;;;;
  29.     ;; if test AutoCAD version returns nil
  30.      (Alert "此功能需在CAD2011及上版本才支持!")
  31.    );; if
  32.   (princ)
  33. )


点评

人为限制的吧,没看到这个代码哪地方需要2011以上版本才能用了。  详情 回复 发表于 2014-11-16 17:20
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复

使用道具 举报

已领礼包: 40个

财富等级: 招财进宝

发表于 2014-11-16 16:56:31 | 显示全部楼层
程序是你自己写的吗? 还是修改别人的程序?

你这个跟EXCEL也没关系啊

  1. (defun XD::Excel:isInstalled ( / obj)
  2.   (and
  3.     (setq obj (vlax-get-or-create-object "Excel.Application"))
  4.     (vlax-release-object obj)
  5.     t
  6.   )
  7. )
  8. (defun c:ww (/ 1p 2p _l d ang 3p 4p 5p 6p 7p 8p 9p 10p 11p) ;
  9.   (if (and (>= (atof (getvar 'ACADVER)) 18.2) ; "16.1" AutoCAD 2005; if test returns T;
  10.            (XD::Excel:isInstalled)
  11.       )
  12.     (progn                                                                      
  13.       (if (and
  14.             (setq 1p (getpoint "\n指定第一点:"))
  15.             (setq 2p (getpoint "\n 指定第二点 :" 1p))
  16.             (if (<= (setq d (distance 1p 2p))
  17.                     5.
  18.                 )
  19.               (progn
  20.                 (alert "两点之间的距离必须超过5个单位 ")
  21.                 nil
  22.               )
  23.               t
  24.             )
  25.           )
  26.         (progn
  27.           (defun _l (j k)
  28.             (entmake (list '(0 . "LINE") (cons 10 j) (cons 11 k)))
  29.           )
  30.           (setq 3p (polar 1p (+ (setq ang (angle 1p 2p))
  31.                                 (* pi 0.5)
  32.                              ) 4.5
  33.                    )
  34.                 4p (polar 3p (+ ang (* pi 1.5)) 9.)
  35.                 5p (polar 4p ang 5.)
  36.                 6p (polar 5p (+ ang (* pi 0.5)) 9.)
  37.                 7p (polar 5p (angle 5p 6p) 1.75)
  38.                 8p (polar 7p ang (- d 5.))
  39.                 9p (polar 8p (angle 5p 6p) 5.5)
  40.                 10p (polar 9p (+ ang pi) (- d 5.))
  41.           )
  42.           (mapcar
  43.             '_l
  44.             (list 4p 5p 7p 9p 6p)
  45.             (list 5p 6p 8p 10p 3p)
  46.           )
  47.         )
  48.       )
  49.       (princ)
  50.     )                                       ;
  51.                                        ; if test AutoCAD version returns
  52.                                        ; nil
  53.     (Alert "此功能需在CAD2011及上版本并系统安装EXCEL软件才支持!")
  54.   )                                       ; if
  55.   (princ)
  56. )
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复

使用道具 举报

已领礼包: 40个

财富等级: 招财进宝

发表于 2014-11-16 17:09:29 | 显示全部楼层
本帖最后由 newer 于 2014-11-16 17:10 编辑

XD::Excel:IsInstalled 修改了,新的下面,你要不用上面那个,就修改下上面的程序,把这个函数加上参数。

  1. ;|
  2. 判断Excel是否安装
  3. 参  数:  tf  ---- 非nil or nil
  4.          lst ---- 表
  5. 返回值: 参数 tf=nil, 返回T or NIL
  6.         参数 tf=非NIL,如果安装了EXCEL,返回对象名,否返回NIL
  7. |;
  8. (defun XD::Excel:isInstalled (tf / obj)
  9.   (and
  10.     (setq obj (vlax-get-or-create-object "Excel.Application"))
  11.     (or
  12.       (and
  13.         (= tf nil)
  14.         (vlax-release-object obj)
  15.         (setq obj t)
  16.       )
  17.     )
  18.   )
  19.   obj
  20. )
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复

使用道具 举报

已领礼包: 40个

财富等级: 招财进宝

发表于 2014-11-16 17:20:37 | 显示全部楼层
lucas3 发表于 2014-11-16 16:51
newer版主,您好,太笨,一下子消化不了,我需要像下面这样,如果安装了就继续执行,没有安装就不执行并 ...

人为限制的吧,没看到这个代码哪地方需要2011以上版本才能用了。

点评

是的,为个程序不需要2011以上,也不需要excel ,我只是随便拿了一个程序来举例  详情 回复 发表于 2014-11-16 17:28
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复

使用道具 举报

已领礼包: 1268个

财富等级: 财源广进

发表于 2014-11-16 17:28:10 | 显示全部楼层
lucas3 发表于 2014-11-16 16:06
这个方法不好吧,用创建不成功来判断?创建不成功,会err的, 时间久了,会忘掉的,到时就不知道这个err ...

不用创建
  1. (defun Current_OFFICE_Profiles_key (/ key $EA_PATH_OFFICE)
  2.   (vl-remove
  3.     nil
  4.     (mapcar
  5.       '(lambda (x)
  6.          (vl-registry-read x "PATH")
  7.        )
  8.       '("HKEY_LOCAL_MACHINE\\SOFTWARE\\MICROSOFT\\OFFICE\\8.0\\EXCEL\\INSTALLROOT"
  9.         "HKEY_LOCAL_MACHINE\\SOFTWARE\\MICROSOFT\\OFFICE\\9.0\\EXCEL\\INSTALLROOT"
  10.         "HKEY_LOCAL_MACHINE\\SOFTWARE\\MICROSOFT\\OFFICE\\10.0\\EXCEL\\INSTALLROOT"
  11.         "HKEY_LOCAL_MACHINE\\SOFTWARE\\MICROSOFT\\OFFICE\\11.0\\EXCEL\\INSTALLROOT"
  12.         "HKEY_LOCAL_MACHINE\\SOFTWARE\\MICROSOFT\\OFFICE\\12.0\\EXCEL\\INSTALLROOT"
  13.         "HKEY_LOCAL_MACHINE\\SOFTWARE\\MICROSOFT\\OFFICE\\13.0\\EXCEL\\INSTALLROOT"
  14.         "HKEY_LOCAL_MACHINE\\SOFTWARE\\MICROSOFT\\OFFICE\\14.0\\EXCEL\\INSTALLROOT";_Office 2010
  15.         "HKEY_LOCAL_MACHINE\\SOFTWARE\\MICROSOFT\\OFFICE\\15.0\\EXCEL\\INSTALLROOT";_Office 2013
  16.        )
  17.     )
  18.   )
  19. )

点评

请问st大师怎么用?就像我上面那个例子,怎么加入到现有程序中?  详情 回复 发表于 2014-11-16 17:30
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复

使用道具 举报

已领礼包: 3199个

财富等级: 富可敌国

 楼主| 发表于 2014-11-16 17:28:14 | 显示全部楼层
newer 发表于 2014-11-16 17:20
人为限制的吧,没看到这个代码哪地方需要2011以上版本才能用了。

是的,为个程序不需要2011以上,也不需要excel ,我只是随便拿了一个程序来举例
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复

使用道具 举报

已领礼包: 3199个

财富等级: 富可敌国

 楼主| 发表于 2014-11-16 17:30:14 | 显示全部楼层

请问st大师怎么用?就像我上面那个例子,怎么加入到现有程序中?

点评

他那个是读注册表,不过有时候并不一定可靠。  详情 回复 发表于 2014-11-16 17:35
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复

使用道具 举报

已领礼包: 40个

财富等级: 招财进宝

发表于 2014-11-16 17:35:47 | 显示全部楼层
本帖最后由 newer 于 2014-11-16 17:36 编辑
lucas3 发表于 2014-11-16 17:30
请问st大师怎么用?就像我上面那个例子,怎么加入到现有程序中?

他那个是读注册表,不过有时候并不一定可靠。

粘贴下去运行啊,不就知道了

命令: (CURRENT_OFFICE_PROFILES_KEY)
("C:\\Program Files\\Microsoft Office 2007\\OFFICE12\\")

点评

是的,因为有可能excel 损坏,或excel.exe被人为删除的情况,我只是想知道方法,就像newer版主你那样加入到我那个样例中?  详情 回复 发表于 2014-11-16 17:40
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复

使用道具 举报

已领礼包: 1268个

财富等级: 财源广进

发表于 2014-11-16 17:38:10 | 显示全部楼层
newer 发表于 2014-11-16 17:35
他那个是读注册表,不过有时候并不一定可靠。

粘贴下去运行啊,不就知道了

没问题,很可靠的!

点评

人为去把这个目录删除掉,而注册表还留着呢 另外判断有没有安装EXCEL不是目的啊,要操作他啊,所以还是判断后返回对象比较好。否则还得去打开EXCEL对象。  详情 回复 发表于 2014-11-16 17:41
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复

使用道具 举报

已领礼包: 3199个

财富等级: 富可敌国

 楼主| 发表于 2014-11-16 17:40:45 | 显示全部楼层
newer 发表于 2014-11-16 17:35
他那个是读注册表,不过有时候并不一定可靠。

粘贴下去运行啊,不就知道了

是的,因为有可能excel 损坏,或excel.exe被人为删除的情况,我只是想知道方法,就像newer版主你那样加入到我那个样例中?
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复

使用道具 举报

已领礼包: 40个

财富等级: 招财进宝

发表于 2014-11-16 17:41:04 | 显示全部楼层
st788796 发表于 2014-11-16 17:38
没问题,很可靠的!

人为去把这个目录删除掉,而注册表还留着呢{:soso_e113:}
另外判断有没有安装EXCEL不是目的啊,要操作他啊,所以还是判断后返回对象比较好。否则还得去打开EXCEL对象。

点评

是的,跟我14楼提到的想法一样,newer版主 ,我想知道那个返回的("C:\\Program Files\\Microsoft Office 2007\\OFFICE12\\")有什么用? 怎么应用st大师的那个函数?  详情 回复 发表于 2014-11-16 17:51
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-12-22 09:43 , Processed in 0.716745 second(s), 71 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

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