明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 2047|回复: 10

[讨论] lisp如何导出excel

[复制链接]
发表于 2024-2-28 15:40:51 | 显示全部楼层 |阅读模式
批量提取图纸文字后需要将文字导出到excel中,现有一段代码是每次运行新建一个sheet,现在想不新建,而是在默认打开的那个sheet的最后追加,这种可以实现吗


现有代码如下

  1. <div>;;函数: (List_Save_Excel List)
  2. ;;功能: 将表数据输出到Excel (新建工作表)
  3. ;;参数: List 表,可以是一维或者二维表,或任意 list 表数据
  4. ;;返回: 0
  5. ;;示例: (List_Save_Excel '(1 2 3))
  6. (defun List_Save_Excel( Lit / GetPy PutPy wbs wb sht xcells d c r)
  7. (setq *appxls* (vlax-get-or-create-object "excel.application"))
  8. (setq GetPy vlax-get-property PutPy vlax-put-property)
  9. (setq wbs (GetPy *appxls* 'Workbooks))
  10. ;;判断工作薄(集合)是否为空,若空则新建工作簿,并返回工作薄指针
  11. (setq wb (if (= 0 (GetPy wbs 'count))
  12.     (vlax-invoke-method wbs 'add)
  13.     (GetPy wbs 'item 1)) ;;如果不为空则返回第一个工作薄
  14. )
  15. ;;新建工作表,用于导出数据。 (GetPy wb 'sheets) 是工作表集合对象
  16. (setq sht (vlax-invoke-method (GetPy wb 'sheets) 'add))
  17. ;;得到工作表的 cells 对象,该对象与 range 对象的区别就是可以用行列定位
  18. (setq xcells (GetPy sht 'cells) r 0 c 0)
  19. (if (= (type Lit) 'LIST)
  20. (repeat (length Lit)
  21.     (setq d (nth r Lit) r (1+ r))
  22.     (if (= (type d) 'LIST)
  23.         (repeat (length d) (PutPy xcells 'item r (1+ c)(vl-princ-to-string(nth c d))) (setq c (1+ c)) )
  24.     (PutPy xcells 'item 1 r (vl-princ-to-string d))
  25.     )
  26.     (setq c 0)
  27. )(PutPy xcells 'item 1 1 (vl-princ-to-string Lit))
  28. )
  29. (vla-put-visible *appxls* 1)  ;;显示工作表
  30.   ;; 保存工作簿为文件
  31.   ;(vla-saveas wb "C:/Test.xlsx")
  32. (vlax-release-object xcells)  ;;用完销毁
  33. (vlax-release-object sht)
  34. (vlax-release-object *appxls*)
  35. )</div>



评分

参与人数 1明经币 +1 收起 理由
kucha007 + 1 赞一个!

查看全部评分

发表于 2024-3-1 09:16:18 | 显示全部楼层
一只傲娇喵 发表于 2024-2-29 09:01
看了看发现还是每次运行都新建一个工作表呀,大佬有无在当前工作表追加数据的代码

去看看@lisp的函数库,那里面的excel部分有你可以用到的函数
回复 支持 0 反对 1

使用道具 举报

 楼主| 发表于 2024-2-29 10:22:51 | 显示全部楼层
研究了一下,好像自己改好了,不新建sheet而是追加

  1. (defun List_Save_Excel2( Lit / GetPy PutPy wbs wb sht xcells d c r)
  2. (setq *appxls* (vlax-get-or-create-object "excel.application"))
  3. (setq GetPy vlax-get-property PutPy vlax-put-property)
  4. (setq wbs (GetPy *appxls* 'Workbooks))
  5.   (setq init nil)
  6. ;;判断工作薄(集合)是否为空,若空则新建工作簿,并返回工作薄指针
  7. (setq wb (if (= 0 (GetPy wbs 'count))
  8.            (progn
  9.                 (vlax-invoke-method wbs 'add)
  10.                      (setq init 1)
  11.              )
  12.     (GetPy wbs 'item 1)) ;;如果不为空则返回第一个工作薄
  13. )
  14. ;;新建工作表,用于导出数据。 (GetPy wb 'sheets) 是工作表集合对象
  15. ;(setq sht (vlax-invoke-method (GetPy wb 'sheets) 'add))
  16.   (setq sht (vlax-get-property *appxls* 'ActiveSheet))
  17.   (setq Rtn (vlax-get-property sht "UsedRange" ))
  18. (setq row_count (vlax-get (vlax-get Rtn 'Rows) 'Count))
  19. ;(princ row_count)
  20.   (if (= 1 init)
  21.     (setq row_count 0)
  22.     )
  23. ;;得到工作表的 cells 对象,该对象与 range 对象的区别就是可以用行列定位
  24. (setq xcells (GetPy sht 'cells) r row_count c 0 ind 0)
  25. (if (= (type Lit) 'LIST)
  26. (repeat (length Lit)
  27.     (setq d (nth ind Lit) r (1+ r) ind (1+ ind))
  28.     (if (= (type d) 'LIST)
  29.       (progn
  30.         (repeat (length d) (PutPy xcells 'item r (1+ c)(vl-princ-to-string(nth c d))) (setq c (1+ c)))
  31.         )
  32.         
  33.     (PutPy xcells 'item (+ 1 (- r ind)) ind (vl-princ-to-string d))
  34.     )
  35.     (setq c 0)
  36. )(PutPy xcells 'item 1 r (vl-princ-to-string Lit))
  37. )
  38. (vla-put-visible *appxls* 1)  ;;显示工作表
  39.   ;; 保存工作簿为文件
  40.   ;(vla-saveas wb "C:/Test.xlsx")
  41. (vlax-release-object xcells)  ;;用完销毁
  42. (vlax-release-object sht)
  43. (vlax-release-object *appxls*)
  44. )
回复 支持 1 反对 0

使用道具 举报

发表于 2024-2-28 17:46:28 | 显示全部楼层
我这码我也用过,忘记了出处了
发表于 2024-2-28 17:56:38 | 显示全部楼层
本帖最后由 咏郡 于 2024-5-9 17:59 编辑

我这个就是改编后的,为了以后我下载代码收了1个币,

本帖子中包含更多资源

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

x

评分

参与人数 1明经币 +1 收起 理由
hubeiwdlue + 1 赞一个!

查看全部评分

发表于 2024-2-28 21:29:10 | 显示全部楼层
咏郡 发表于 2024-2-28 17:56
我这个就是改编后的,为了以后我下载代码收了1个币

这个程序完整吗?
 楼主| 发表于 2024-2-29 09:01:29 | 显示全部楼层
咏郡 发表于 2024-2-28 17:56
我这个就是改编后的,为了以后我下载代码收了1个币

看了看发现还是每次运行都新建一个工作表呀,大佬有无在当前工作表追加数据的代码
发表于 2024-2-29 21:40:02 | 显示全部楼层
学到了,感谢分享
发表于 2024-4-29 15:54:19 | 显示全部楼层
感谢分享,提供了很好的思路
发表于 2024-5-9 10:31:31 | 显示全部楼层
咏郡 发表于 2024-2-28 17:56
我这个就是改编后的,为了以后我下载代码收了1个币

大佬,请教下为啥我下载之后加载成功运行K2命令启动了,但是后来加载成功,运行K2变成未知指令了,求教,谢谢
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2024-11-25 17:56 , Processed in 0.174435 second(s), 28 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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