明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 3012|回复: 4

[求助]用VLISP将CAD中的数据输出到EXCEL

[复制链接]
发表于 2007-2-7 11:25:00 | 显示全部楼层 |阅读模式

小弟修改了网上下载的源文件;用LISP将列表输出到EXCEL中,可是运行不通过,请高手指点一下!谢谢

文件如下:

;加载EXCEL2003类型库
(vl-load-com)
(defun DSX-TypeLib-Excel ( / sysdrv tlb)
(setq sysdrv (getenv "systemdrive"))
(cond
 ( (setq tlb (findfile (strcat sysdrv "\\Program Files\\Microsoft Office\\Office11\\Excel.exe")))
 tlb
 )
)
)

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;定义EXCEL2003类型库接口
(defun DSX-Load-TypeLib-Excel ( / tlbfile tlbver out)
(cond
 ( (null msxl-xl24HourClock)
 (if (setq tlbfile (DSX-TypeLib-Excel))
  (progn
   (vlax-import-type-library
   :tlb-filename tlbfile
   :methods-prefix "msxl-"
   :properties-prefix "msxl-"
   :constants-prefix "msxl-"
   )
   (if msxl-xl24HourClock (setq out T))
  )
 )
 )
 ( T (setq out T) )
)
out
)
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;; 注意: <dmode> 可以设为 "SHOW" (显示)或 "HIDE" (隐藏),它取决于你希望
;;; Excel 进程是否可以让用户直接操作访问。
(defun DSX-Open-Excel-New (dmode / appsession)
(princ "\n创建一个新的 Excel 电子表格文件...")
(cond
( (setq appsession (vlax-create-object "Excel.Application"))
(vlax-invoke-method (vlax-get-property appsession 'WorkBooks) 'Add)
(if (= (strcase dmode) "SHOW")
(vla-put-visible appsession 1)
(vla-put-visible appsession 0)
)
)
)
appsession
)
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;主程序:取出指定的EXCEL文件中指定范围内的数据
(defun C:putexcel
( / xlapp xlfile ready tlbfile ash range xlist)

 (DSX-Load-TypeLib-Excel)


(setq xlapp (DSX-Open-Excel-new  "SHOW"))
(setq range (msxl-Get-ActiveSheet xlapp))
  (setq r range)
(setq range1 (msxl-Get-ActiveCell xlapp))
 
(DSX-Excel-Put-RowList '(1 2) 1 1 range1)


)


;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;*************************************************************************
;;; 模块: DSX-Excel-Put-RowList
;;; 描述: 将列表写到工作表指定行(startrow) 中的指定起始列(startcol)
;;; 参数: list, startrow, startcol
;;; 示例: (DSX-Excel-Put-RowList '("A" "B" "C") 1 2) 将数据分别输出到单元格(1,B) (1,C) (1,D)中
;;;*************************************************************************

(defun DSX-Excel-Put-RowList (lst startrow startcol range)
(foreach itm lst
 (msxl-put-value
  (vlax-variant-value
   (msxl-get-item (msxl-get-cells range)
    (vlax-make-variant startrow)
     (vlax-make-variant startcol)
   )
  )
 itm
 )
(setq startcol (1+ startcol))
); repeat
)

发表于 2008-5-6 21:29:00 | 显示全部楼层
本帖最后由 作者 于 2008-5-7 3:31:04 编辑

这些函数里面有很多自定义的函数呢,如:msxl-get-item 。不全的话当然无法运行

哦,看错了。

参考一下这个:

(defun xsl:addcell (row col val)
  (vlax-put
    (vlax-variant-value
      (vlax-get-property
 cells
 'item
 (vlax-make-variant row)
 (vlax-make-variant Col)
      )
    )
    'value
    val
  )
)

发表于 2008-5-7 00:37:00 | 显示全部楼层

把msxl-put-value改成msxl-put-value1试试

发表于 2008-5-7 06:43:00 | 显示全部楼层
好像多闭括号
发表于 2013-2-1 13:23:29 | 显示全部楼层
sailorcwx 发表于 2008-5-7 00:37
把msxl-put-value改成msxl-put-value1试试

把msxl-put-value改成msxl-put-value2
我也为这问题纠结了很久!你虽然说得不对,但提醒了我,谢谢
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2025-6-1 05:48 , Processed in 0.177188 second(s), 27 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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