乐筑天下

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

[编程交流] lisp帮助-来自的区域

[复制链接]

3

主题

14

帖子

11

银币

初来乍到

Rank: 1

铜币
15
发表于 2022-7-5 15:20:21 | 显示全部楼层 |阅读模式
你好
大家可能已经知道,我对这个论坛很陌生,但对autocad并不陌生(已经使用了将近10年),但我对autolisp世界(以及vba)真的很陌生,我计划自己学习很多,以自动化我们所做的一些工作。
 
无论如何,我找到了一个Lisp程序的用户“Fixo”(一个好的灵魂,用来帮助像我这样的noobs)写了大约8年了。有问题的Lisp程序做了我需要的,但有一个小问题。每次使用时,它都会打开一个新的excel文件。
我需要将闭合选定多边形的区域获取到当前和打开的excel文件,以及我单击的单元格。
 
我希望我把自己说得尽可能清楚。
 
如果有帮助的话,这是指向我引用的autolisp文件(AreasToXL\u V3或V5)的链接
 
http://www.cadtutor.net/forum/showthread.php?41722-Excel的闭合多段线面积值&p=697435#post697435
 
我可以看到打开excel的代码就是这个
 
  1. (setq aexc (vlax-get-object "Excel.Application")
  2.   xbks (vlax-get-property aexc "Workbooks")
  3.   abks (vlax-invoke-method xbks "Add")
  4.   xshs (vlax-get-property abks "Sheets")
  5.   asht (vlax-get-property xshs "Item" 1)
  6.   xcel (vlax-get-property asht "Cells")
  7.   )

 
我正在附加(或者至少尝试附加,因为这是我第一次附加东西)两个示例文件。显示所需结果的DWG和excel。
 
事先非常感谢任何能够提供至少一点帮助的人
实例图纸
实例xlsx公司
回复

使用道具 举报

3

主题

14

帖子

11

银币

初来乍到

Rank: 1

铜币
15
发表于 2022-7-5 15:39:33 | 显示全部楼层
没有人
好吧,如果我提出一个解决方案(希望在2019年之前),我会把它贴在这里
回复

使用道具 举报

106

主题

1万

帖子

101

银币

顶梁支柱

Rank: 50Rank: 50

铜币
1299
发表于 2022-7-5 15:41:25 | 显示全部楼层
如果你看看Getexel。lsp它有很多功能,包括使用开放式excel。上面的代码使用Add函数。而不是检查它是否已经打开。
 
我有一个快速发挥,但需要做一点更多的是一个excel目前开放。
回复

使用道具 举报

5

主题

956

帖子

963

银币

初来乍到

Rank: 1

铜币
35
发表于 2022-7-5 15:54:15 | 显示全部楼层
 
您好,刚刚注意到您的第一个帖子是2018年2月7日下午08:37
IMO没有回应可能与excel vba宏自动化有关??
 
在Excel工作表单元格中:
这是vba可以做到的,但本LISP论坛讨论不要求vba免费提供
但是如果你尝试一些代码来寻求帮助,我相信你会得到这里活跃成员的快速响应来解决你的问题
 
我更喜欢以“*.csv”格式输出纯文本,它通过AutoLisp打开和写入行函数很简单
它也可以在Excel中查看,比ActiveX方法更简单、更快。
 
除非您需要一些格式化的输出,否则您可以按照BIGAL的建议使用Excel API。
 
但这里有一个使用Lisp方法的快速替代解决方案。。
  1. [color="green"];limitations
  2. ;Each lot must be a closed LWPolyline
  3. ;Area text must contain "*[b] m2[/b]"
  4. ;Lot number must be numeric
  5. ;Assume each lot has ONLY (lot number text & area text) pairs
  6. [color="red"];all labels must be inside polygon[/color] [/color]
  7. (alert "Type "[b]TEST[/b]" in command line (without quote) to invoke.. ")
  8. (defun c:test ( / l i s ss ls lst en ob fn f wp )
  9. ;hanhphuc [color="red"]18[/color].04.2018
  10. (and
  11. (setq
  12.      ss  (ssget "X"  (list '(0 . "LWPOLYLINE") '(-4 . "=") '(70 . 1)[color="red"] (cons 410  (getvar 'ctab))[/color]))) [color="green"];<- edit[/color]
  13.      )
  14. (repeat        (setq i (sslength ss))
  15. (setq        en  (ssname ss (setq i (1- i)))
  16. wp  (mapcar ''((x)(trans (cdr x) en 1)) (vl-remove-if ''((x) (/= (car x) 10)) (entget en)))   
  17. lst (cons (if (setq s (ssget "WP"  wp  ))
  18.             (setq ls (vl-remove        nil
  19.                                 (mapcar        ''((x)
  20.                                            (setq ob (vlax-ename->vla-object x))
  21.                                            (if
  22.                                             (vlax-property-available-p ob 'TextString)
  23.                                             (vlax-get ob 'TextString)
  24.                                             )
  25.                                            )
  26.                                         (acet-ss-to-list s)
  27.                                         )
  28.                                 )
  29.                   ls (if [color="red"](and (=(length ls)2)[/color]
  30.                               (wcmatch (car ls) "* m2*")[color="red"])[/color]
  31.                        (reverse ls)
  32.                        ls
  33.                        )
  34.                   ls (subst (strcat (car ls) ",") (car ls) ls)
  35.                   ls [color="red"](if (wcmatch(cadr ls) "*,*")[/color] (subst (vl-string-subst "" "," (cadr ls)) (cadr ls) ls) ls)
  36.                   )
  37.             )
  38.           lst
  39.           )
  40. )
  41. )
  42. (setq fn (strcat (getvar 'dwgprefix) "Area_example.csv"))
  43. (setq f (open fn "a"))
  44. (foreach x (cons "\nlot Number,Area"
  45.          (vl-sort (vl-remove nil lst) ''((a b) (< (atoi (car a)) (atoi (car b)))))
  46.          )
  47. (write-line
  48.    (if        (listp x)
  49.      (apply 'strcat x)
  50.      x
  51.      )
  52.    f
  53.    )
  54. )
  55. (progn
  56. (if f
  57. (close f)
  58. )
  59. (command "startapp" "notepad" fn)
  60. [color="green"];(command "start" fn) ;if default Excel to open *csv [/color]
  61. )
  62. )
  63. (princ)
  64. )
  65. (vl-load-com)
  66. (C:TEST)

 
附言:如果您使用的是AC2016,那么命令:DATAEXTRACTION如何?但不是ac2007
回复

使用道具 举报

3

主题

14

帖子

11

银币

初来乍到

Rank: 1

铜币
15
发表于 2022-7-5 16:00:48 | 显示全部楼层
谢谢比格尔。
我要再看一眼那个格泰克塞尔。lsp,看看我能不能从中得到一些对我的事业有用的东西
回复

使用道具 举报

3

主题

14

帖子

11

银币

初来乍到

Rank: 1

铜币
15
发表于 2022-7-5 16:13:12 | 显示全部楼层
谢谢你的提示
关于vba宏,我们已经有了一个vba宏,它完成了我在中尝试做的事情。lsp格式。但是,我相信在lisp格式中,它可以得到进一步的增强。或者我应该给vba宏一个机会。我不知道。正如我所说,我正在学习,我选择先学习autolisp,然后学习vba。
 
我会在下班后再尝试一些代码(可能是下周)。我将尝试的第一个代码将是您键入的代码
为什么我需要打开excel文件,为什么我们不使用数据提取?因为我们每个月都要做数千次提取工作,而数据提取并没有提供我们真正需要的东西
一点自动化(比vba宏中的自动化多一点)可以帮助我们更快、无误地完成工作
 
再次感谢你
我会在收到结果后发布
回复

使用道具 举报

5

主题

956

帖子

963

银币

初来乍到

Rank: 1

铜币
35
发表于 2022-7-5 16:28:28 | 显示全部楼层
不用担心,总比什么都没有好。
 
备注:当打开“Example.xls”文件时,我收到了安全警告,但它不是vba项目中的宏。我的猜测是excel宏接口autocad,也许。
祝你好运!
回复

使用道具 举报

发表回复

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

本版积分规则

  • 微信公众平台

  • 扫描访问手机版

  • 点击图片下载手机App

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

GMT+8, 2025-3-14 13:06 , Processed in 1.694563 second(s), 66 queries .

© 2020-2025 乐筑天下

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