乐筑天下

搜索
欢迎各位开发者和用户入驻本平台 尊重版权,从我做起,拒绝盗版,拒绝倒卖 签到、发布资源、邀请好友注册,可以获得银币 请注意保管好自己的密码,避免账户资金被盗
查看: 92|回复: 8

[编程交流] Lisp用于放置定义的excel

[复制链接]

1

主题

5

帖子

4

银币

初来乍到

Rank: 1

铜币
5
发表于 2022-7-6 08:05:55 | 显示全部楼层 |阅读模式
大家好!
 
很长一段时间以来,我一直在这个论坛上受益于您对autocad lisps的丰富知识,但第一次我找不到我想要的东西,所以我发布了这个。如果你能帮我,我很感激。
 
多亏了你们,我正在使用张贴在这里的lisphttp://www.cadtutor.net/forum/showthread.php?31653-点到excel工作表的Lisp坐标-(点编号)
 
除了这个很棒的Lisp程序,我想知道你们是否可以安排一些事情,把标签放在这些点上,而不是只放数字。它完美地生成了数字,但我真正想要的是放置一个标签,我可以用连续的数字定义,比如WO 1,WO 2,WO 3。。。
 
如果你能帮我一把,我会非常高兴的
回复

使用道具 举报

114

主题

1万

帖子

1万

银币

中流砥柱

Rank: 25

铜币
543
发表于 2022-7-6 08:14:23 | 显示全部楼层
下面是一个快速通用点标记程序:
 
  1. (defun c:ptlabel ( / ht i l pr s sf ts )
  2.    (setq
  3.        pr (getstring t "\nSpecify Label Prefix <None>: ")
  4.        sf (getstring t "\nSpecify Label Suffix <None>: ")
  5.        st (cond ((getint (strcat "\nSpecify Start Number <" (itoa (setq st (cond (st) (1)))) ">: "))) (st))
  6.        ht (cons 40 (getvar 'TEXTSIZE))
  7.        ts (cons  7 (getvar 'TEXTSTYLE))
  8.    )
  9.    (initget "LtR RtL BtT TtB")
  10.    (setq dr (cond ((getkword (strcat "\nSpecify Direction [LtR/RtL/BtT/TtB] <" (setq dr (cond (dr) ("LtR"))) ">: "))) (dr)))
  11.    
  12.    (if (setq s (ssget '((0 . "POINT"))))
  13.        (progn
  14.            (repeat (setq i (sslength s))
  15.                (setq l (cons (assoc 10 (entget (ssname s (setq i (1- i))))) l))
  16.            )
  17.            (foreach pt
  18.                (vl-sort l
  19.                    (cdr
  20.                        (assoc dr
  21.                           '(
  22.                                ("LtR" . (lambda ( a b ) (< (cadr  a) (cadr  b))))
  23.                                ("RtL" . (lambda ( a b ) (> (cadr  a) (cadr  b))))
  24.                                ("BtT" . (lambda ( a b ) (< (caddr a) (caddr b))))
  25.                                ("TtB" . (lambda ( a b ) (> (caddr a) (caddr b))))
  26.                            )
  27.                        )
  28.                    )
  29.                )
  30.                (entmake (list '(0 . "TEXT") pt ht ts '(72 . 1) '(73 . 2) (cons 11 (cdr pt)) (cons 1 (strcat pr (itoa st) sf))))
  31.                (setq st (1+ st))
  32.            )
  33.        )
  34.    )
  35.    (princ)
  36. )
回复

使用道具 举报

1

主题

5

帖子

4

银币

初来乍到

Rank: 1

铜币
5
发表于 2022-7-6 08:25:43 | 显示全部楼层
给出了错误的论点。你能再查一下吗
回复

使用道具 举报

5

主题

1334

帖子

1410

银币

限制会员

铜币
-20
发表于 2022-7-6 08:35:54 | 显示全部楼层
在这里,我纠正了。。。也许李在交通高峰期。。。
 
  1. (defun c:ptlabel ( / dr ht i lst pr s st sf ts )
  2.    (setq
  3.        pr (getstring t "\nSpecify Label Prefix <None>: ")
  4.        sf (getstring t "\nSpecify Label Suffix <None>: ")
  5.        st (cond ((getint (strcat "\nSpecify Start Number <" (itoa (setq st (cond (st) (1)))) ">: "))) (st))
  6.        ht (cons 40 (getvar 'TEXTSIZE))
  7.        ts (cons  7 (getvar 'TEXTSTYLE))
  8.    )
  9.    (initget "LtR RtL BtT TtB")
  10.    (setq dr (cond ((getkword (strcat "\nSpecify Direction [LtR/RtL/BtT/TtB] <" (setq dr (cond (dr) ("LtR"))) ">: "))) (dr)))
  11.    
  12.    (if (setq s (ssget '((0 . "POINT"))))
  13.        (progn
  14.            (repeat (setq i (sslength s))
  15.                (setq lst (cons (cdr (assoc 10 (entget (ssname s (setq i (1- i)))))) lst))
  16.            )
  17.            (foreach pt
  18.                (vl-sort lst
  19.                    (cdr
  20.                        (assoc dr
  21.                           '(
  22.                                ("LtR" . (lambda ( a b ) (< (car  a) (car  b))))
  23.                                ("RtL" . (lambda ( a b ) (> (car  a) (car  b))))
  24.                                ("BtT" . (lambda ( a b ) (< (cadr a) (cadr b))))
  25.                                ("TtB" . (lambda ( a b ) (> (cadr a) (cadr b))))
  26.                            )
  27.                        )
  28.                    )
  29.                )
  30.                (entmake (list '(0 . "TEXT") (cons 10 pt) ht ts '(72 . 1) '(73 . 2) (cons 11 pt) (cons 1 (strcat pr (itoa st) sf))))
  31.                (setq st (1+ st))
  32.            )
  33.        )
  34.    )
  35.    (princ)
  36. )

 
李,希望你生气。。。干杯,周末快乐。。。M、 R。
回复

使用道具 举报

114

主题

1万

帖子

1万

银币

中流砥柱

Rank: 25

铜币
543
发表于 2022-7-6 08:41:12 | 显示全部楼层
 
所有这些都对我有效,我的代码没有错误
回复

使用道具 举报

1

主题

5

帖子

4

银币

初来乍到

Rank: 1

铜币
5
发表于 2022-7-6 08:46:12 | 显示全部楼层
李和马尔科,谢谢你们。现在效果很好。既然我在这里看到了你们两个,你们认为可以修改它,使标签可以来自excel的一列,而点可以来自另一列?
 
我需要能够将带有这些标签的坐标导出到excel中,如下所示:http://www.cadtutor.net/forum/showthread.php?31653-点到excel工作表的Lisp坐标-(点编号)
回复

使用道具 举报

1

主题

5

帖子

4

银币

初来乍到

Rank: 1

铜币
5
发表于 2022-7-6 08:57:25 | 显示全部楼层
我简直不敢相信,我从早上开始提到的帖子已经做到了。我只是到最后才读。非常感谢VVA和李,我也看到了你们在那个帖子中的贡献。你们真是太棒了
回复

使用道具 举报

5

主题

1334

帖子

1410

银币

限制会员

铜币
-20
发表于 2022-7-6 09:01:35 | 显示全部楼层
试试这个:
 
  1. (defun c:ptlabel ( / dr fn file ht i lst pr s st sf ts )
  2.    (setq
  3.        pr (getstring t "\nSpecify Label Prefix <None>: ")
  4.        sf (getstring t "\nSpecify Label Suffix <None>: ")
  5.        st (cond ((getint (strcat "\nSpecify Start Number <" (itoa (setq st (cond (st) (1)))) ">: "))) (st))
  6.        ht (cons 40 (getvar 'TEXTSIZE))
  7.        ts (cons  7 (getvar 'TEXTSTYLE))
  8.    )
  9.    (initget "LtR RtL BtT TtB")
  10.    (setq dr (cond ((getkword (strcat "\nSpecify Direction [LtR/RtL/BtT/TtB] <" (setq dr (cond (dr) ("LtR"))) ">: "))) (dr)))
  11.    
  12.    (if (setq s (ssget '((0 . "POINT"))))
  13.        (progn
  14.            (setq fn (getfiled "Enter file to save to" (getvar 'dwgprefix) "csv" 1))
  15.            (setq file (open fn "w"))
  16.            (repeat (setq i (sslength s))
  17.                (setq lst (cons (cdr (assoc 10 (entget (ssname s (setq i (1- i)))))) lst))
  18.            )
  19.            (foreach pt
  20.                (vl-sort lst
  21.                    (cdr
  22.                        (assoc dr
  23.                           '(
  24.                                ("LtR" . (lambda ( a b ) (< (car  a) (car  b))))
  25.                                ("RtL" . (lambda ( a b ) (> (car  a) (car  b))))
  26.                                ("BtT" . (lambda ( a b ) (< (cadr a) (cadr b))))
  27.                                ("TtB" . (lambda ( a b ) (> (cadr a) (cadr b))))
  28.                            )
  29.                        )
  30.                    )
  31.                )
  32.                (entmake (list '(0 . "TEXT") (cons 10 pt) ht ts '(72 . 1) '(73 . 2) (cons 11 pt) (cons 1 (strcat pr (itoa st) sf))))
  33.                (write-line (strcat pr (itoa st) sf "," (vl-princ-to-string pt)) file)
  34.                (setq st (1+ st))
  35.            )
  36.            (close file)
  37.            (startapp "explorer.exe" fn)
  38.        )
  39.    )
  40.    (princ)
  41. )

 
如果我理解正确,您希望将点数据从CAD导出到EXCEL。。。选项是通过CSV文件;启动EXCEL后,您可以将工作表数据保存为任何EXCEL文件格式,如XLS等。。。
 
干杯,M.R。
回复

使用道具 举报

1

主题

5

帖子

4

银币

初来乍到

Rank: 1

铜币
5
发表于 2022-7-6 09:13:21 | 显示全部楼层
实际上,我在想,如果我们在excel表格中有两列,比如213123.2112314,54和另一个相邻的列作为对这一点的描述,比如第1点。我们可以把这个描述放在给定坐标的点上吗?
回复

使用道具 举报

发表回复

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

  • 微信公众平台

  • 扫描访问手机版

  • 点击图片下载手机App

QQ|关于我们|小黑屋|乐筑天下 繁体中文

GMT+8, 2025-3-9 21:40 , Processed in 0.392752 second(s), 70 queries .

© 2020-2025 乐筑天下

联系客服 关注微信 帮助中心 下载APP 返回顶部 返回列表