[求助]用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/> ( (setq tlb (findfile (strcat sysdrv "<a href="file://\\Program">\\Program</a> Files\\Microsoft Office\\Office11\\Excel.exe")))<br/> tlb<br/> )<br/>)<br/>) </p><p>;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;<br/>;定义EXCEL2003类型库接口<br/>(defun DSX-Load-TypeLib-Excel ( / tlbfile tlbver out)<br/>(cond<br/> ( (null msxl-xl24HourClock)<br/> (if (setq tlbfile (DSX-TypeLib-Excel))<br/> (progn<br/> (vlax-import-type-library<br/> :tlb-filename tlbfile<br/> :methods-prefix "msxl-"<br/> :properties-prefix "msxl-"<br/> :constants-prefix "msxl-"<br/> )<br/> (if msxl-xl24HourClock (setq out T))<br/> )<br/> )<br/> )<br/> ( T (setq out T) )<br/>)<br/>out<br/>)<br/>;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;<br/>;;; 注意: <dmode> 可以设为 "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> (DSX-Load-TypeLib-Excel)</p><p><br/>(setq xlapp (DSX-Open-Excel-new "SHOW"))<br/>(setq range (msxl-Get-ActiveSheet xlapp))<br/> (setq r range)<br/>(setq range1 (msxl-Get-ActiveCell xlapp))<br/> <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/> (msxl-put-value<br/> (vlax-variant-value<br/> (msxl-get-item (msxl-get-cells range)<br/> (vlax-make-variant startrow)<br/> (vlax-make-variant startcol)<br/> )<br/> )<br/> itm<br/> )<br/>(setq startcol (1+ startcol))<br/>); repeat<br/>) <br/></p> 本帖最后由 作者 于 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/> (vlax-put<br/> (vlax-variant-value<br/> (vlax-get-property<br/> cells<br/> 'item<br/> (vlax-make-variant row)<br/> (vlax-make-variant Col)<br/> )<br/> )<br/> 'value<br/> val<br/> )<br/>)</p> <p>把msxl-put-value改成msxl-put-value1试试</p> 好像多闭括号 sailorcwx 发表于 2008-5-7 00:37 static/image/common/back.gif把msxl-put-value改成msxl-put-value1试试
把msxl-put-value改成msxl-put-value2
我也为这问题纠结了很久!你虽然说得不对,但提醒了我,谢谢
页:
[1]