liushijun 发表于 2007-2-7 11:25:00

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

<p>小弟修改了网上下载的源文件;用LISP将列表输出到EXCEL中,可是运行不通过,请高手指点一下!谢谢</p><p>文件如下:</p><p>;加载EXCEL2003类型库<br/>(vl-load-com) <br/>(defun DSX-TypeLib-Excel ( / sysdrv tlb)<br/>(setq sysdrv (getenv "systemdrive"))<br/>(cond<br/>&nbsp;( (setq tlb (findfile (strcat sysdrv "<a href="file://\\Program">\\Program</a> Files\\Microsoft Office\\Office11\\Excel.exe")))<br/>&nbsp;tlb<br/>&nbsp;)<br/>)<br/>) </p><p>;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;<br/>;定义EXCEL2003类型库接口<br/>(defun DSX-Load-TypeLib-Excel ( / tlbfile tlbver out)<br/>(cond<br/>&nbsp;( (null msxl-xl24HourClock)<br/>&nbsp;(if (setq tlbfile (DSX-TypeLib-Excel))<br/>&nbsp;&nbsp;(progn<br/>&nbsp;&nbsp;&nbsp;(vlax-import-type-library<br/>&nbsp;&nbsp;&nbsp;:tlb-filename tlbfile<br/>&nbsp;&nbsp;&nbsp;:methods-prefix "msxl-"<br/>&nbsp;&nbsp;&nbsp;:properties-prefix "msxl-"<br/>&nbsp;&nbsp;&nbsp;:constants-prefix "msxl-"<br/>&nbsp;&nbsp;&nbsp;)<br/>&nbsp;&nbsp;&nbsp;(if msxl-xl24HourClock (setq out T))<br/>&nbsp;&nbsp;)<br/>&nbsp;)<br/>&nbsp;)<br/>&nbsp;( T (setq out T) )<br/>)<br/>out<br/>)<br/>;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;<br/>;;; 注意: &lt;dmode&gt; 可以设为 "SHOW" (显示)或 "HIDE" (隐藏),它取决于你希望<br/>;;; Excel 进程是否可以让用户直接操作访问。 <br/>(defun DSX-Open-Excel-New (dmode / appsession)<br/>(princ "\n创建一个新的 Excel 电子表格文件...")<br/>(cond<br/>( (setq appsession (vlax-create-object "Excel.Application"))<br/>(vlax-invoke-method (vlax-get-property appsession 'WorkBooks) 'Add)<br/>(if (= (strcase dmode) "SHOW")<br/>(vla-put-visible appsession 1)<br/>(vla-put-visible appsession 0)<br/>)<br/>)<br/>)<br/>appsession<br/>) <br/>;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;<br/>;主程序:取出指定的EXCEL文件中指定范围内的数据<br/>(defun C:putexcel<br/>( / xlapp xlfile ready tlbfile ash range xlist)</p><p>&nbsp;(DSX-Load-TypeLib-Excel)</p><p><br/>(setq xlapp (DSX-Open-Excel-new&nbsp; "SHOW"))<br/>(setq range (msxl-Get-ActiveSheet xlapp))<br/>&nbsp; (setq r range)<br/>(setq range1 (msxl-Get-ActiveCell xlapp))<br/>&nbsp; <br/>(DSX-Excel-Put-RowList '(1 2) 1 1 range1)</p><p><br/>) </p><p><br/>;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;<br/>;;;*************************************************************************<br/>;;; 模块: DSX-Excel-Put-RowList<br/>;;; 描述: 将列表写到工作表指定行(startrow) 中的指定起始列(startcol)<br/>;;; 参数: list, startrow, startcol<br/>;;; 示例: (DSX-Excel-Put-RowList '("A" "B" "C") 1 2) 将数据分别输出到单元格(1,B) (1,C) (1,D)中 <br/>;;;*************************************************************************</p><p>(defun DSX-Excel-Put-RowList (lst startrow startcol range)<br/>(foreach itm lst<br/>&nbsp;(msxl-put-value<br/>&nbsp;&nbsp;(vlax-variant-value<br/>&nbsp;&nbsp;&nbsp;(msxl-get-item (msxl-get-cells range)<br/>&nbsp;&nbsp;&nbsp;&nbsp;(vlax-make-variant startrow)<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(vlax-make-variant startcol)<br/>&nbsp;&nbsp;&nbsp;)<br/>&nbsp;&nbsp;)<br/>&nbsp;itm<br/>&nbsp;)<br/>(setq startcol (1+ startcol))<br/>); repeat<br/>) <br/></p>

无痕 发表于 2008-5-6 21:29:00

本帖最后由 作者 于 2008-5-7 3:31:04 编辑 <br /><br /> <p>这些函数里面有很多自定义的函数呢,如:msxl-get-item 。不全的话当然无法运行</p><p>哦,看错了。</p><p>参考一下这个:</p><p>(defun xsl:addcell (row col val)<br/>&nbsp; (vlax-put<br/>&nbsp;&nbsp;&nbsp; (vlax-variant-value<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (vlax-get-property<br/>&nbsp;cells<br/>&nbsp;'item<br/>&nbsp;(vlax-make-variant row)<br/>&nbsp;(vlax-make-variant Col)<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; )<br/>&nbsp;&nbsp;&nbsp; )<br/>&nbsp;&nbsp;&nbsp; 'value<br/>&nbsp;&nbsp;&nbsp; val<br/>&nbsp; )<br/>)</p>

sailorcwx 发表于 2008-5-7 00:37:00

<p>把msxl-put-value改成msxl-put-value1试试</p>

董堃 发表于 2008-5-7 06:43:00

好像多闭括号

skzbh1@sina.com 发表于 2013-2-1 13:23:29

sailorcwx 发表于 2008-5-7 00:37 static/image/common/back.gif
把msxl-put-value改成msxl-put-value1试试

把msxl-put-value改成msxl-put-value2
我也为这问题纠结了很久!你虽然说得不对,但提醒了我,谢谢
页: [1]
查看完整版本: [求助]用VLISP将CAD中的数据输出到EXCEL