明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 10242|回复: 30

[函数] vlisp操作Excel百万数据

  [复制链接]
发表于 2022-9-9 21:50 | 显示全部楼层 |阅读模式
本帖最后由 和尚777 于 2022-9-9 21:57 编辑
vlisp操作Excel百万数据
;以数组+字典 技术可以实现对数据的增删改查等;这些数据可以转换成lisp数据
;这样就可以用Excel成为你的数据库,速度还是很快的

    附件中有测试文件
    测试前需要先用Excel打开 hs777副本.xlsm
    还附带了个vlisp批量操作Excel文件
      此例是对A列去重,保留同一行的数据
  1. (defun c:tt1(/ a e)
  2.   (vl-load-com)
  3.   (if(setq e(vlax-get-object "excel.Application"))
  4.     (tt4 e)
  5.   )
  6.   (if(setq a(vlax-get-object "ket.Application"))
  7.     (tt4 a)
  8.   )
  9. )
  10. ; 2022-9-9 和尚777 QQ 1765102082
  11. (defun tt4 (e / arr brr colm dic e i j k key range row sht v)
  12.   (setq time(hs-jsq))
  13.   (setq dic (vlax-get-or-create-object "scripting.dictionary"))
  14.   (setq sht(vlax-get-property e "ActiveSheet"))
  15.   (setq range(vlax-get-property sht "UsedRange"));用户已使用区域
  16.   (setq arr(vlax-variant-value (vlax-get-property range "value" nil)))
  17.   (setq row(vlax-safearray-get-u-bound arr 1))
  18.   (setq colm(vlax-safearray-get-u-bound arr 2))
  19.   (setq brr(ReDim-arr row colm))
  20.   (setq i 0 k 0)
  21.   (repeat row
  22.     (setq i (1+ i))(setq j 0)
  23.     (setq key(vlax-variant-value(vlax-safearray-get-element arr i 1)))
  24.     (if(= :vlax-false (vlax-invoke-method dic "exists" key))
  25.       (progn
  26.         (setq k(1+ k))
  27.         (vlax-invoke-method dic "add" key "1")
  28.         (repeat colm
  29.           (setq j(1+ j))
  30.           (setq v(vlax-variant-value
  31.                  (vlax-safearray-get-element arr i j)))
  32.           (vlax-safearray-put-element brr k j v)
  33.         )
  34.       )
  35.     )
  36.   )
  37.   (vlax-put-property range "value2" brr)
  38.   (vlax-invoke-method dic "removeall")
  39.   (vlax-release-object dic)
  40. (hs-jsq-end time)  (princ)
  41. )

  42. (defun ReDim-arr(r c)
  43.   (vlax-make-safearray
  44.     vlax-vbVariant
  45.     (cons 1 (1+ r))(cons 1 (1+ c))
  46.   )
  47. )
  • ;批量操作excel文件
  1. (defun c:tt2 (/ aw e p p1 path s w ws)
  2.   (setq e(vlax-get-object "excel.Application"))
  3.   (vlax-put-property e "DisplayAlerts" :vlax-False);关闭警告弹窗,如果程序运行中断自己想办法恢复哦
  4.   (setq ws(vlax-get-property e "workbooks"))
  5.   (setq aw(vlax-get-property e "activeworkbook"))
  6.   (setq path(vlax-get-property aw "path"))
  7.   (setq p(vlax-invoke
  8.     (vlax-create-object "scripting.filesystemobject" )
  9.     'getfolder path ))
  10.   (vlax-for x (vlax-get-property p "files")
  11.     (setq s(vlax-get-property x "name"))
  12.     (if(not(wcmatch s "*副本*"))
  13.       (progn
  14.         (setq w(vlax-invoke-method ws "open" x))
  15.         (setq p1(vlax-get-property w "name"));a1单元格写入文件名
  16.         (vlax-put-property
  17.           (vlax-get-property
  18.             (vlax-get-property
  19.               (vlax-get-property w "sheets" )
  20.               "item" 1
  21.             )
  22.             "range" "a1"
  23.           )
  24.           "value2" p1
  25.         )
  26.         (vlax-invoke-method w "close" :vlax-true)
  27.       )
  28.     )
  29.   )
  30.   (vlax-put-property e "DisplayAlerts" :vlax-true);恢复警告弹窗
  31. )

本帖子中包含更多资源

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

x

评分

参与人数 10明经币 +10 金钱 +30 收起 理由
cghdy + 1 很给力!
dtucad + 1 和尚666 +1
Yruz + 1 很给力!
USER2128 + 1 很给力!
自贡黄明儒 + 1 很给力!
悟沧 + 1 神马都是浮云
guosheyang + 1 赞一个!
xj6019 + 1 赞一个!
tigcat + 1 很给力!
highflybird + 30 赞一个!

查看全部评分

本帖被以下淘专辑推荐:

发表于 2022-9-12 07:44 | 显示全部楼层

學習了,感謝共享資料!
回复 支持 1 反对 0

使用道具 举报

发表于 2024-3-29 17:01 | 显示全部楼层
锋十七 发表于 2023-4-3 12:54
谢谢楼主的分享
学到了很多,也解决了我的难题

厉害   咱这小卡拉米  完全看不懂
发表于 2023-2-17 22:52 | 显示全部楼层
在百万条数据里面搜索某一列的值等于指定数据,返回整条数据,速度能否做到0.1秒返回?
发表于 2022-9-10 08:07 | 显示全部楼层
非常好的程序,多谢分享!
发表于 2022-9-10 08:41 | 显示全部楼层
感谢共享资料!
发表于 2022-9-10 10:50 | 显示全部楼层
学习了,感谢共享资料!
发表于 2022-9-10 13:17 | 显示全部楼层
本帖最后由 烟盒迷唇 于 2022-9-12 06:54 编辑

非常厉害了
发表于 2022-9-12 12:20 | 显示全部楼层
厉害了~很有用
发表于 2022-9-12 17:27 | 显示全部楼层
数组+字典, 是VBA的精华所在,被您搬到lisp来了。
发表于 2022-9-13 10:26 | 显示全部楼层
感谢共享资料!
发表于 2022-9-13 11:30 | 显示全部楼层
感谢分享,学习了
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2024-6-22 20:38 , Processed in 0.180492 second(s), 31 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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