迷不知途 发表于 2016-2-26 14:02:04

这段读取excel的代码那里出错了?如何修改!多谢!

学习了一下大师langjs《沉降过程图绘制》中的读取excel,用了其中一部分,但是总是出问题!
运行第一次的时候没有问题,但是再次运行的时候就不行了!调试的时候也没问题,可是到CAD里面运行的
时候就又不行了,折腾了很久,后来发现在任务管理器中把excel的进程结束后又可以运行了,我想应该是
程序后面没有结束excel的调用,导致文件处于打开状态,所以再第一次运行成功后,再次运行程序的时候
就无法打开文件了!
现在关键是不知道如何结束excel的调用!请大师们看看如何修改下面这段代码?多谢了!

(defun c:rex( )
(vl-load-com)
(setq oldfil "d:\\tmp.et")

(setq appsession (vlax-create-object "Excel.Application"))
(vlax-invoke-method (vlax-get-property appsession 'WorkBooks) 'open oldfil)
(vla-put-visible appsession 0)
(setq excelapp (vlax-get-object "Excel.Application"))
(setq wb (vlax-get-property excelapp 'activeworkbook)) ; excel工作簿对象
(setq sh (vlax-get-property wb 'activesheet)) ; excel工作表对象
(setq range0 (vlax-get-property sh 'range "A65536"))
(setq e (vlax-get-property (vlax-get-property range0 'end -4162) 'row))
(setq cells (vlax-get sh "cells"))
(setq i 2)
(while ( < i( 1+ e))
      (setq str (rexcel cells i)) ; 读取第i行
      (princ "\n")
      (princ str)
      (setq i (1+ i))
      )
(cond
      ((not (vlax-object-released-p appsession))
          (vlax-invoke-method appsession 'quit)
          (vlax-release-object appsession)
      )
      )
)

;=========================
;读取excel行自定义函数

(defun rexcel (cells i / j zh z)
    (setq zh nil
          z nil
          j 1
    )
    (while ( < j 9)
      (setq z (vlax-variant-value (vlax-variant-change-type (vlax-get-property cells 'item i j) 8)))
      (setq zh (append zh (list(list z))))
      (setq j (1+ j))
    )
    zh
)


kozmosovia 发表于 2016-2-26 14:24:08

把(setq appsession (vlax-create-object "Excel.Application"))
改成
(setq appsession (vlax-get-or-create-object "Excel.Application"))

迷不知途 发表于 2016-2-26 14:37:41

kozmosovia 发表于 2016-2-26 14:24 static/image/common/back.gif
把(setq appsession (vlax-create-object "Excel.Application"))
改成
(setq appsession (vlax-get-or-cr ...

多谢多谢!成功了!!
页: [1]
查看完整版本: 这段读取excel的代码那里出错了?如何修改!多谢!