明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 7111|回复: 8

[讨论]LISP中操作EXCEL

[复制链接]
发表于 2005-7-5 15:55:00 | 显示全部楼层 |阅读模式
我在“二次开发”版块中看到一篇文章,“Visual LIsp与Excel电子表格” 其中有一段讲的是把数据写入EXCEL表格中,

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

(defun DSX-Excel-Put-ColumnList (lst startrow startcol)
(foreach itm lst
(msxl-put-value
(DSX-Excel-Get-Cell range startrow startcol)
itm
)
(setq startrow (1+ startrow))
); repeat
)

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

(defun DSX-Excel-Put-RowList (lst startrow startcol)
(foreach itm lst
(msxl-put-value
(DSX-Excel-Get-Cell range startrow startcol)
itm
)
(setq startcol (1+ startcol))
); repeat
)

文章的其它部分能通过,可这段却出错,出错语句是

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

"觉得好,就打赏"
还没有人打赏,支持一下
发表于 2005-7-5 17:03:00 | 显示全部楼层
最好把你的测试程序和测试内容也放上来,这个程序我记得以前也试过,好象是可以的
发表于 2005-7-5 17:07:00 | 显示全部楼层
把msxl-put-value -> msxl-put-value2试试
 楼主| 发表于 2005-7-6 09:16:00 | 显示全部楼层
龙龙仔说得对,我在发完帖后,又在XDCAD查到一篇相关的文章,在一个类似的函数中看到用了-PUT-VALUE2,我就抱着试试看的想法加了个2,结果可以了。


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


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


我在EXCEL中查到三个相关属性,VALUE、VALUE2、VALUES,可当我再向下查时,显示没有联机帮助,我也就无法再查下去了,哪位有这三个属性的资料或说明,请指教。
发表于 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
(findfile
(strcat
SYSDRV
"\\Program Files\\Microsoft Office\\Office11\\Excel.exe"
)
)
)
TLB
) .....
发表于 2005-10-11 14:50:00 | 显示全部楼层

安装文件的路径可以通过注册表读取:

(vl-registry-read        "HKEY_LOCAL_MACHINE\\SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\App Paths\\excel.exe"
        "path"
      )

另一个问题我不明白:

value2 和 Value 属性的唯一区别在于 Value2 属性不使用 CurrencyDate 数据类型。通过使用 Double 数据类型,可将用这些数据类型设置格式的数据按浮点数字返回。

如果我要输入的值不是这两种数据类型,就应该可以用"msxl-put-value",为什么在excel 2003 中一点不能用 "msxl-put-value" 而只能用 "msxl-put-value2" 呢?

发表于 2010-5-21 16:03:00 | 显示全部楼层
龙龙仔我爱死你了!找了半天这个同样的问题在这里找到了。
发表于 2011-7-11 12:20:53 | 显示全部楼层
原来 原因在这里 哈哈 感谢龙龙仔
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2025-6-10 04:14 , Processed in 0.176287 second(s), 26 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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