明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 2080|回复: 5

内插查询excel工作表中数据用于计算,求修改

[复制链接]
发表于 2015-6-26 08:44:02 | 显示全部楼层 |阅读模式
[ 本帖最后由 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)
    )
  )
)

 楼主| 发表于 2015-6-26 08:45:48 | 显示全部楼层
以下是文件。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册

x
 楼主| 发表于 2015-6-26 09:38:57 | 显示全部楼层
这是电子表格数据

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册

x
发表于 2017-8-28 09:57:27 | 显示全部楼层
CAD插件管理程序
发表于 2022-6-12 22:35:29 | 显示全部楼层
为什么不用excel自身的公式,反而要借助于lisp呢
 楼主| 发表于 2022-6-29 10:47:08 | 显示全部楼层
20060510412 发表于 2022-6-12 22:35
为什么不用excel自身的公式,反而要借助于lisp呢

想在CAD里面调用任意桩号的参数来绘图,所以要内插计算,请多指点
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2024-11-25 06:52 , Processed in 0.161886 second(s), 28 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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