内插查询excel工作表中数据用于计算,求修改
[ 本帖最后由 yxh1202 于 2015-6-29 08:14 编辑 ]\n\n工作中需要在制图中查询很多高程数据,本人参考前辈的有关资料编写了一个小代码,但运行出现数据类型错误问题,请高人指点:(defun c:ttt ()
(setq lc (getreal "\n请输入里程(纯数字):"))
(setq kgc(ty lc 6) ;查询excel参数求堤顶高程,8为列数可调
hSgc (ty lc 5) ;查询excel参数求洪水高程
ptgc (ty lc 4) ;查询excel参数求平台高程
dgc(ty lc 3) ;查询excel参数求基础底高程
h1 (- kgc hsgc 0.5) ;超高线以上高度
h2 (- hsgc ptgs -0.5) ;超高线至平台高
h3 (- ptgc dgc)
)
)
;;;=======读取excel文件数据,获得对应桩号的断面高程参数=====
(defun ty
(lc col@ / excelapp0 activeworkbook0 activesheet0 cells0)
(vl-load-com)
;;;简单示例lisp读取excel里的数据(没有判断容错功能)by snddd2000 2011-11-17
;;;先打开excel文件,然后选定要查询的工作表(激活)
(setq excelapp0 (vlax-get-object "Excel.Application"))
;excel程序对象,没开excel下边的都是白搭
(setq activeworkbook0 (vlax-get-property excelapp0 'ActiveWorkbook))
;excel工作簿对象
(setq activesheet0 (vlax-get-property activeworkbook0 'ActiveSheet))
;excel工作表对象
(setq cells0 (vlax-get-property activesheet0 'cells))
;excel单元格对象
(setq aLastcell (vlax-get-property
cells0
'item
(vlax-get-property
(vlax-get-property
(vlax-get-property cells0 'cells)
'rows
)
'count
)
1
)
)
(setq endxluprow0 ;_A列有数据的最后一行的行号
(vlax-get-property
(vlax-get-property
(vlax-variant-value aLastcell)
'end
-4162
)
'row
)
)
(setq k 3)
;;;lc (getreal "\n请输入查询的桩号")
(repeat endxluprow0
(setq vv
(vlxls-get-cellvalue cells0 k 2)
)
(if (> lc vv)
(setq k (1+ k))
(setq q k)
)
)
(setq dd (vlxls-cell-leicha lc q col@))
(princ dd)
(mapcar 'vlax-release-object
(list cells0 activesheet0 activeworkbook0 excelapp0)
)
(gc) ;强制收集无用数据,释放不再使用的节点
(princ)
)
;;网上找的,返回一个单元格range地址
(defun vlxls-get-cell (obj row col / item cells)
(setq item (vlax-get-property
(setq cells (vlax-get-property obj "Cells"))
"Item"
(vlax-make-variant row)
(vlax-make-variant col)
)
)
(vlax-release-object cells)
(vlax-variant-value item)
)
;;=====返回单元格的值------
(defun vlxls-get-cellvalue (obj row col / item cells cellvalue)
(setq item (vlax-get-property
(setq cells (vlax-get-property obj "Cells"))
"Item"
(vlax-make-variant row)
(vlax-make-variant col)
)
)
(vlax-release-object cells)
(vlax-variant-value item)
(setq cellvalue
(vlax-variant-value
(vlax-get-property
(vlxls-get-cell obj row col)
'value
;;或者'value
)
)
;;单元格里面的值
)
)
;;===内插求值函数=======
(defun vlxls-cell-leicha (lc row@ col@ / a1 a2 lc2)
(if (= lc (vlxls-get-cellvalue cells0 row@ 2))
(setq a (vlxls-get-cellvalue cells0 row@ col@))
(setq a1(vlxls-get-cellvalue cells0 row@ col@)
a2(vlxls-get-cellvalue cells0 (- row@ 1) col@)
lc1 (vlxls-get-cellvalue cells0 row@ 2)
lc2 (vlxls-get-cellvalue cells0 (- row@ 1) 2)
a (+ (* (/ (- a1 a2) (- lc1 lc2)) (- lc lc2)) a2)
)
)
)
以下是文件。 这是电子表格数据 CAD插件管理程序 为什么不用excel自身的公式,反而要借助于lisp呢 20060510412 发表于 2022-6-12 22:35
为什么不用excel自身的公式,反而要借助于lisp呢
想在CAD里面调用任意桩号的参数来绘图,所以要内插计算,请多指点
页:
[1]