找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 1234|回复: 7

[求助] [求助]:VLISP调用EXCEL中的数据,必须要运行EXCEL吗?

[复制链接]
发表于 2005-5-30 19:52:10 | 显示全部楼层 |阅读模式

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

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

×
VLISP调用EXCEL中的数据,必须要运行EXCEL吗?请指点。。。最近的程序用到了EXCEL存放数据!
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
发表于 2005-5-31 08:56:27 | 显示全部楼层
是的,必须要运行EXCEL。
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2005-5-31 09:07:39 | 显示全部楼层
你是怎么连接CAD与EXCEL的,能不能发个程序啊
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2005-5-31 13:32:26 | 显示全部楼层
是一定要運行,但是你可以讓它在不顯示的狀態下運行,
但是要記得調用結束后一定要退出,要不然你的EXCEL
就會象打不開一樣。。。
順便給几個調用EXCEL的程序給你們參觀一下
[php/]
(Defun vlxls-app-Init (/ OSVar GGG Olb8 Olb9 Olb10 TLB Out msg msg1 msg2)
  ;;;;;;;;;;該程序實現了初始化EXCEL應用程序!
  (if *Chinese*
  (setq msg  "\n 初始化微軟Excel "
        msg1 "\042初始化Excel失敗\042"
        msg2 (strcat "\042 警告""\n ====""\n 無法在您的計算机上檢測到微軟Excel軟件"
              "\n 如果您确認已經安裝Excel, 請發送電子郵"
              "\n 件到99849930449@sina.com獲取更多的解決方案\042"))
  (setq msg  "\n Initializing Microsoft Excel "
        msg1 "\042Initialization Error\042"
        msg2 (strcat "\042 WARNING""\n ======="
                     "\n Can NOT detect Excel97/200X/XP in your computer"
                     "\n If you already have Excel installed, please email"
                     "\n us to get more solution via yota@ikozmos.com\042"))
    )
(if (null msxl-xl24HourClock)
(progn (if (and (setq GGG (vl-registry-read
        "HKEY_LOCAL_MACHINE\\SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\App Paths\\Excel.EXE"
        "Path"))
(setq GGG (strcase (strcat GGG "Excel.EXE"))))
(progn (foreach OSVar (list "SYSTEMROOT" "WINDIR""WINBOOTDIR" "SYSTEMDRIVE"
           "USERNAME"  "COMPUTERNAME" "HOMEDRIVE" "HOMEPATH" "PROGRAMFILES")
   (if    (vl-string-search (strcat "%" OSVar "%") GGG)
          (setq GGG (vl-string-subst (strcase (getenv OSVar))
                      (strcat "%" OSVar "%")GGG)))
         )
(setq   Olb8  (findfile (vl-string-subst "EXCEL8.OLB" "EXCEL.EXE" GGG))
         Olb9  (findfile (vl-string-subst "EXCEL9.OLB" "EXCEL.EXE" GGG))
         Olb10 (findfile (vl-string-subst "EXCEL10.OLB" "EXCEL.EXE" GGG)))
(cond  ((= (vl-filename-base (vl-filename-directory GGG))"OFFICE11")
         (setq TLB GGG Out "2003"))
        ((= (vl-filename-base (vl-filename-directory GGG))
            "OFFICE10")
         (setq TLB GGG Out "XP"))
         (Olb9 (setq TLB Olb9 Out "2000"))
         (Olb8 (setq TLB Olb8 Out "97"))
         (t (setq Out "Version Unknown"))
        )
  (if TLB (progn (princ (strcat MSG Out "..."))
                 (vlax-import-type-library
                    :tlb-filename TLB
                    :methods-prefix "msxl-"
                    :properties-prefix "msxl-"
                    :constants-prefix "msxl-"))
    )
  )(progn (if vldcl-msgbox
             (vldcl-msgbox "x" msg1 msg2)
             (alert (read msg2)))
          (exit)))
  )
  )
  msxl-xl24HourClock
  )
;;;Examples:
;;;(vlxls-app-init) return: 33

(Defun vlxls-app-New (UnHide / Rtn)
  ;;;; 該程序實現功能:新建一個excel格
  ;;;;;;;;;; THIS PROGRAM CAN BUILD A NEW EXCELFILE
  (if (vlxls-app-init)
      (progn
      (if *Chinese* (princ "\n 新建微軟Excel工作表...")
                    (princ "\n Creating new Excel Spreadsheet file..."))
      (if (setq Rtn (vlax-get-or-create-object "Excel.Application"))
      (progn (vlax-invoke-method
             (vlax-get-property Rtn 'WorkBooks)
             'Add)
        (if UnHide (vla-put-visible Rtn 1)
          (vla-put-visible Rtn 0))
    )
    )
      )
    )
  Rtn
  )
;;;Examples:
;;;(setq *xlapp* (vlxls-app-new T)) return: #<VLA-OBJECT _Application 001db27c>

(Defun vlxls-app-open(XLSFile UnHide / ExcelApp WorkSheet Sheets ActiveSheet Rtn)
  ;;;function: this program can open an excelfile
  (setq XLSFile (strcase XLSFile))
  (if (null (wcmatch XLSFile "*.XLS"))
  (setq XLSFile (strcat XLSFile ".XLS")))
  (if (and (findfile XLSFile)
       (setq Rtn (vlax-get-or-create-object "Excel.Application")))
    (progn (vlax-invoke-method (vlax-get-property Rtn 'WorkBooks)
        'Open XLSFile)
(if UnHide
    (vla-put-visible Rtn 1)
    (vla-put-visible Rtn 0))))
  Rtn)

;;;Examples:
;;;(setq *xlapp* (vlxls-app-open “C:/test.XLS” T)) e #<VLA-OBJECT _Application 001efd2c>

(Defun vlxls-app-save (xlapp)
  ;;;;保存文件
  (equal (vlax-invoke-method
         (vlax-get-property Xlapp "ActiveWorkbook")"Save")
         :vlax-true)
  )
;;;Examples:
;;;(vlxls-app-save *xlapp*) return: T

(Defun vlxls-app-saveas (xlapp Filename / Rtn);;;另存文件
   (if (null filename)
    (setq filename (strcat (getvar "dwgprefix") "XLS.XLS")))
   (if (null (wcmatch (setq filename (strcase Filename)) "*.XLS"))
   (setq filename (strcat filename ".XLS")))
   (if (findfile Filename)
    (vl-file-delete (findfile Filename))
    )
   (vlax-invoke-method
     (vlax-get-property Xlapp "ActiveWorkbook")
     "SaveAs"
     Filename
     msxl-xlNormal
     ""
     ""
     :vlax-False
     :vlax-False
     nil
     )
  (findfile Filename)
  )

;;;Examples:
;;;(vlxls-app-saveas *xlapp* nil) return: “C:/Temp-Folder/XLS.XLS”
;;;(vlxls-app-saveas *xlapp* “C:/Temp-Folder/XLS.XLS”) return: “C:/Temp-Folder/XLS.XLS”
;;;(vlxls-app-saveas *xlapp* nil) return: NIL

(Defun vlxls-app-quit (ExlObj SaveYN);;退出應用程序
  (if SaveYN
     (vlax-invoke-method
       (vlax-get-property ExlObj "ActiveWorkbook")
       'Close
       )
    (vlax-invoke-method
      (vlax-get-property ExlObj "ActiveWorkbook")
      'Close
        :vlax-False
      )
    )
  (vlax-invoke-method ExlObj 'QUIT)
  (vlax-release-object ExlObj)
  (setq ExlObj nil)
  (gc)
  )
;;;Examples:
;;;(vlxls-app-quit *xlapp* nil) return: nil

(Defun vlxls-app-kill (SaveYN / ExlObj);;;強行清除所有EXCEL應用程序
  (while (setq ExlObj (vlax-get-object "Excel.Application"))
    (vlxls-app-quit ExlObj SaveYN))
  )
;;;Examples:
;;;(vlxls-app-kill T) return: nil

(Defun vlxls-app-autofit (xlapp / sh act Rtn);;;存儲格自動調整大小
  (setq act (vlxls-Sheet-Get-Active xlapp))
  (foreach sh (append (vl-remove act (vlxls-sheet-get-all Xlapp))
            (list act))
  (setq Rtn (variant-value (msxl-autofit
                             (msxl-get-columns
                               (msxl-get-Cells
              (vlxls-sheet-get-usedrange xlapp sh))))))
    )
  (equal Rtn :vlax-true)
  )
;;;Examples:
;;;(vlxls-app-autofit *xlapp*) return: T
;;;(vlxls-app-autofit *xlapp*) return: NIL

(Defun vlxls-sheet-get-all (xlapp / SH Rtn);;;;取得所有應用的頁
  (vlax-for SH (vlax-get-property Xlapp "sheets")
  (setq Rtn (cons (vlax-get-property sh "Name") Rtn))
  )(reverse Rtn)
  )
;;;Examples:
;;;(vlxls-sheet-get-all *xlapp*) e ("Sheet1" "Sheet2" "Sheet3")

(Defun vlxls-Sheet-Get-Active (xlapp);;;;返回當前應用的頁
  (vlax-get-property (msxl-get-ActiveSheet Xlapp) 'name)
  )
(defun vlxls-ScreenUpdating-Off  (*xlapp*)
  (vlax-put-property *xlapp* 'ScreenUpdating 0));;;顯示
(defun vlxls-ScreenUpdating-On  (*xlapp*)
  (vlax-put-property *xlapp* 'ScreenUpdating -1));;不顯示
[php]
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

 楼主| 发表于 2005-5-31 18:21:26 | 显示全部楼层
我有一个疑问,如果用户当前正在运行AutoCAD和EXCEL两个程序,假使VLISP调用了EXCEL,也就是说用EXCEL再打开一个进程,但若隐藏不显示的话,那么是否同时也隐藏了用户运行LISP之前的EXCEL进程呢?若是这样,就违背了WINDOWS的规则,会让用户迷惑不解的。如果用数据库,诸如FoxBASE、FoxPRO、Access,是否可以实现不打开而直接读取里边的数据呢?
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2005-6-1 15:41:32 | 显示全部楼层
其實并沒有違反任何規則,
VLISP用(vlax-get-or-create-object "Excel.Application")
得到EXCEL的進程,先判斷是否有進程,如果沒有則創建
有的話就使用原來的進程,然后取得進程的屬性并且進行修改
,個人認為并沒有什么問題啊。。
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

 楼主| 发表于 2005-6-2 18:11:47 | 显示全部楼层
我明白了,谢谢6楼的兄长!我的ACTIVEX部分还要加强学习啊~~~
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2005-6-3 09:29:52 | 显示全部楼层
在VB里可以直接用ADO对象操作Excel文件,Lisp里应该也可以吧
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-9-28 06:45 , Processed in 0.195243 second(s), 46 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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