winabcd 发表于 2005-7-5 15:55:00

[讨论]LISP中操作EXCEL

我在“二次开发”版块中看到一篇文章,“Visual LIsp与Excel电子表格”


其中有一段讲的是把数据写入EXCEL表格中,


<P class=program>;;;*************************************************************************<BR>;;; 模块: DSX-Excel-Put-ColumnList<BR>;;; 描述: 将列表写到工作表指定列(startcol)中的指定起始行(startrow) <BR>;;; 参数: list, startrow, startcol<BR>;;; 样例: (DSX-Excel-Put-ColumnList '("A" "B" "C") 1 2) 将数据分别输出到单元格(1,B) (2,B) (3,B)中<BR>;;;*************************************************************************


<P class=program>(defun DSX-Excel-Put-ColumnList (lst startrow startcol)<BR>(foreach itm lst<BR>(msxl-put-value<BR>(DSX-Excel-Get-Cell range startrow startcol)<BR>itm<BR>)<BR>(setq startrow (1+ startrow))<BR>); repeat<BR>)


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


<P class=program>(defun DSX-Excel-Put-RowList (lst startrow startcol)<BR>(foreach itm lst<BR>(msxl-put-value<BR>(DSX-Excel-Get-Cell range startrow startcol)<BR>itm<BR>)<BR>(setq startcol (1+ startcol))<BR>); repeat<BR>)


<P class=program>文章的其它部分能通过,可这段却出错,出错语句是


<P class=program>(msxl-put-value<BR>(DSX-Excel-Get-Cell range startrow startcol)<BR>itm<BR>)<BR>不知什么地方出错,请各位指教

meflying 发表于 2005-7-5 17:03:00

最好把你的测试程序和测试内容也放上来,这个程序我记得以前也试过,好象是可以的

龙龙仔 发表于 2005-7-5 17:07:00

把msxl-put-value -&gt; msxl-put-value2试试

winabcd 发表于 2005-7-6 09:16:00

龙龙仔说得对,我在发完帖后,又在XDCAD查到一篇相关的文章,在一个类似的函数中看到用了-PUT-VALUE2,我就抱着试试看的想法加了个2,结果可以了。


但我在网上找了很长时间,也没有弄清-PUT-VALUE的用法,为什么我-GET-VALUE可以得到单元格的值,而-PUT-VALUE不行,要用-PUT-VALUE2。


那么,-PUT-VALUE到底又是用来做什么的呢?


我在EXCEL中查到三个相关属性,VALUE、VALUE2、VALUES,可当我再向下查时,显示没有联机帮助,我也就无法再查下去了,哪位有这三个属性的资料或说明,请指教。

xiaocai8 发表于 2005-7-6 23:39:00

我使用的是EXCEL2003版,在(msxl-Get-ActiveSheet xlapp)语句时出错,我以前用的是excel2000版的,msxl-Get-ActiveSheet 没有问题,还望高手指点。

龙龙仔 发表于 2005-7-7 07:57:00

再增加一个判断excel2003


(defun DSX-TYPELIB-EXCEL (/ SYSDRV TLB)


......


((setq TLB<BR>                               (findfile<BR>                                               (strcat<BR>                SYSDRV<BR>                "<A href="file://Program/" target="_blank" >\\Program</A> Files\\Microsoft Office\\Office11\\Excel.exe"<BR>                                               )<BR>                               )<BR>                               )<BR>                               TLB<BR>                       )


.....

cjs 发表于 2005-10-11 14:50:00

<P>安装文件的路径可以通过注册表读取:</P>
<P>(vl-registry-read&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; "HKEY_LOCAL_MACHINE\\SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\App Paths\\excel.exe"<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; "path"<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; )</P>
<P>另一个问题我不明白:</P>
<P>value2 和 <B class=bterm>Value</B> 属性的唯一区别在于 <B class=bterm>Value2</B> 属性不使用 <B class=bterm>Currency</B> 和 <B class=bterm>Date</B> 数据类型。通过使用 <B class=bterm>Double</B> 数据类型,可将用这些数据类型设置格式的数据按浮点数字返回。</P>
<P>如果我要输入的值不是这两种数据类型,就应该可以用"msxl-put-value",为什么在excel 2003 中一点不能用 "msxl-put-value" 而只能用 "msxl-put-value2" 呢?</P>

hustluo93 发表于 2010-5-21 16:03:00

龙龙仔我爱死你了!找了半天这个同样的问题在这里找到了。

jicqj 发表于 2011-7-11 12:20:53

原来 原因在这里 哈哈 感谢龙龙仔
页: [1]
查看完整版本: [讨论]LISP中操作EXCEL