乐筑天下

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

[编程交流] 选择并移动多行文字(&T)

[复制链接]

10

主题

30

帖子

20

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
50
发表于 2022-7-5 20:04:56 | 显示全部楼层 |阅读模式
我在附图中有很多植物的名字。我所需要的是根据文本字符串来选择那些,例如:如果键入IXO,则应选择所有包含IXO的文本。
 
由于空间限制,随附图纸的PDF。
 
 
我使用tharwat的下面提到的代码来查找总数,但结果是在记事本中可以有人将其更改为excel。
 
  1. (defun c:ctxt (/ s i e f o x y l lst)
  2. ;; Tharwat 18. mar. 2014 ;;
  3. (princ "\n Select texts to export to txt file :")
  4. (if (setq s (ssget '((0 . "TEXT") (1 . "#*"))))
  5. (progn (setq o (open (setq f (strcat (getvar 'DWGPREFIX) (vl-filename-base (getvar 'DWGNAME)) ".txt")) "w"))
  6. (write-line (strcat "DESCRIPTION" "\t" "QTY") o)
  7. (repeat (setq i (sslength s))
  8. (setq e (entget (ssname s (setq i (1- i))))
  9. x (cdr (assoc 1 e))
  10. b ""
  11. )
  12. (while (wcmatch (setq a (substr x 1 1)) "1,2,3,4,5,6,7,8,9,0")
  13. (setq b (strcat b a)
  14. x (substr x 2)
  15. )
  16. )
  17. (if (setq y (assoc (setq x (substr x 2)) l))
  18. (setq l (subst (cons x (+ (atof b) (cdr y))) y l))
  19. (setq l (cons (cons x (atof b)) l))
  20. )
  21. )
  22. (foreach x l (write-line (strcat (car x) "\t" (rtos (cdr x) 2 1)) o))
  23. (close o)
  24. (startapp "notepad.exe" f)
  25. )
  26. )
  27. (princ)
  28. )

210505rjpvct55ccy8yn5y.jpg
回复

使用道具 举报

63

主题

6297

帖子

6283

银币

后起之秀

Rank: 20Rank: 20Rank: 20Rank: 20

铜币
358
发表于 2022-7-5 20:20:46 | 显示全部楼层
你好
 
玩一玩,让我知道。
 
  1. (defun c:ccsv (/ s i e f o x y l lst)
  2. ;; Tharwat 18. Mar. 2015 ;;
  3. (princ "\n Select Single line texts to export to Excel file :")
  4. (if (setq s (ssget '((0 . "TEXT") (1 . "#*"))))
  5.    (progn
  6.      (setq o (open (setq f (strcat (getvar 'DWGPREFIX)
  7.                                    (vl-filename-base (getvar 'DWGNAME))
  8.                                    ".csv"
  9.                            )
  10.                    )
  11.                    "w"
  12.              )
  13.      )
  14.      (write-line (strcat "DESCRIPTION" ";" "QTY") o)
  15.      (repeat (setq i (sslength s))
  16.        (setq e (entget (ssname s (setq i (1- i))))
  17.              x (cdr (assoc 1 e))
  18.              b ""
  19.        )
  20.        (while (wcmatch (setq a (substr x 1 1)) "[0-9]")
  21.          (setq b (strcat b a)
  22.                x (substr x 2)
  23.          )
  24.        )
  25.        (if (setq y (assoc (setq x (substr x 2)) l))
  26.          (setq l (subst (cons x (+ (atof b) (cdr y))) y l))
  27.          (setq l (cons (cons x (atof b)) l))
  28.        )
  29.      )
  30.      (foreach x l
  31.        (write-line (strcat (car x) ";" (rtos (cdr x) 2 1)) o)
  32.      )
  33.      (close o)
  34.    )
  35. )
  36. (princ)
  37. )
回复

使用道具 举报

10

主题

30

帖子

20

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
50
发表于 2022-7-5 20:46:34 | 显示全部楼层
先生
 
这很好,但结果是在一列中同时包含plant name和QT,如果可能,可以在不同的列中进行。
这是我用于将图层名称和长度导出到excel的代码,结果是否与MLEN输出匹配
  1. (defun c:mlen (/ m ss clist temp xls sort combine mlen4_1)
  2. (defun sort (lst predicate)
  3.    (mapcar '(lambda (x) (nth x lst)) (vl-sort-i lst predicate))
  4. )
  5. (defun combine (inlist is-greater is-equal / sorted current result)
  6.    (setq sorted (sort inlist is-greater))
  7.    (setq current (list (car sorted)))
  8.    (foreach item (cdr sorted)
  9.      (if (apply is-equal (list item (car current)))
  10. (setq current (cons item current))
  11. (progn
  12.    (setq result (cons current result))
  13.    (setq current (list item))
  14. )
  15.      )
  16.    )
  17.    (cons current result)
  18. )
  19. (defun xls ( Data-list header Colhide Name_list / *aplexcel* *books-colection* Currsep
  20. *excell-cells* *new-book* *sheet#1* *sheet-collection* col iz_listo row cell cols)
  21. (defun Letter (N / Res TMP)(setq Res "")(while (> N 0)(setq TMP (rem N 26)
  22. TMP (if (zerop TMP)(setq N (1- N) TMP 26) TMP)
  23. Res (strcat (chr (+ 64 TMP)) Res)  N   (/ N 26))) Res)
  24. (if (null Name_list)(setq Name_list ""))
  25. (setq  *AplExcel*     (vlax-get-or-create-object "Excel.Application"))
  26. (if (setq *New-Book*  (vlax-get-property *AplExcel* "ActiveWorkbook"))
  27.    (setq *Books-Colection*  (vlax-get-property *AplExcel* "Workbooks")
  28.          *Sheet-Collection* (vlax-get-property *New-Book* "Sheets")
  29.               *Sheet#1*     (vlax-invoke-method *Sheet-Collection* "Add"))
  30. (setq *Books-Colection*  (vlax-get-property *AplExcel* "Workbooks")
  31.              *New-Book*     (vlax-invoke-method *Books-Colection* "Add")
  32.          *Sheet-Collection* (vlax-get-property *New-Book* "Sheets")
  33.               *Sheet#1*     (vlax-get-property *Sheet-Collection* "Item" 1)))
  34. (setq *excell-cells*     (vlax-get-property *Sheet#1* "Cells"))
  35. (setq Name_list (if (= Name_list "")
  36.                  (vl-filename-base(getvar "DWGNAME"))
  37.                  (strcat (vl-filename-base(getvar "DWGNAME")) "&" Name_list))
  38.   col 0 cols nil)
  39. (if (> (strlen Name_list) 26)
  40. (setq Name_list (strcat (substr Name_list 1 10) "..." (substr Name_list (- (strlen Name_list) 13) 14))))
  41. (vlax-for sh *Sheet-Collection* (setq cols (cons (strcase(vlax-get-property sh 'Name)) cols)))
  42. (setq row Name_list)
  43. (while (member (strcase row) cols)(setq row (strcat Name_list " (" (itoa(setq col (1+ col)))")")))
  44. (setq Name_list row)
  45. (vlax-put-property *Sheet#1* 'Name Name_list)
  46. (setq Currsep (vlax-get-property *AplExcel* "UseSystemSeparators"))
  47. (vlax-put-property *AplExcel* "UseSystemSeparators" :vlax-false) ;_?? ???????????? ????????? ?????????
  48. (vlax-put-property *AplExcel* "DecimalSeparator" ".")            ;_??????????? ??????? ? ????? ?????
  49. (vlax-put-property *AplExcel* "ThousandsSeparator" " ")          ;_??????????? ???????
  50. (vla-put-visible *AplExcel* :vlax-true)(setq row 1 col 1)
  51. (if (null header)(setq header '("X" "Y" "Z")))
  52. (repeat (length header)(vlax-put-property *excell-cells* "Item" row col
  53. (vl-princ-to-string (nth (1- col) header)))(setq col (1+ col)))(setq  row 2 col 1)
  54. (repeat (length Data-list)(setq iz_listo (car Data-list))(repeat (length iz_listo)
  55. (vlax-put-property *excell-cells* "Item" row col (vl-princ-to-string (car iz_listo)))
  56. (setq iz_listo (cdr iz_listo) col (1+ col)))(setq Data-list (cdr Data-list))(setq col 1 row (1+ row)))
  57. (setq col (1+(length header)) row (1+ row))
  58. (setq cell (vlax-variant-value (vlax-invoke-method *Sheet#1* "Evaluate"
  59.    (strcat "A1:" (letter col)(itoa row))))) ;_ end of setq
  60. (setq cols (vlax-get-property cell  'Columns))
  61. (vlax-invoke-method cols 'Autofit)
  62. (vlax-release-object cols)(vlax-release-object cell)
  63. (foreach item ColHide (if (numberp item)(setq item (letter item)))
  64. (setq cell (vlax-variant-value (vlax-invoke-method *Sheet#1* "Evaluate"
  65.    (strcat item "1:" item "1"))))
  66. (setq cols (vlax-get-property cell  'Columns))
  67. (vlax-put-property cols 'hidden 1)
  68. (vlax-release-object cols)(vlax-release-object cell))
  69. (vlax-put-property *AplExcel* "UseSystemSeparators" Currsep)
  70. (mapcar 'vlax-release-object (list *excell-cells* *Sheet#1* *Sheet-Collection* *New-Book* *Books-Colection*
  71. *AplExcel*))(setq *AplExcel* nil)(gc)(gc)(princ))  
  72. (defun mlen4_1 (lst / sum_len)
  73.    (setq sum_len 0)
  74.    (foreach item (mapcar 'car lst)
  75.      (setq
  76. sum_len  (+ sum_len
  77.       (if (vlax-property-available-p item 'length)
  78.         (vla-get-length item)
  79.         (cond
  80.           ((=
  81.        (strcase (vla-get-objectname item) t)
  82.        "acdbarc"
  83.      ) ;_  =
  84.      (vla-get-arclength item)
  85.           )
  86.           ((=
  87.        (strcase (vla-get-objectname item) t)
  88.        "acbcircle"
  89.      ) ;_  =
  90.      (* pi 2.0 (vla-get-radius item))
  91.           )
  92.           (t 0.0)
  93.         ) ;_  cond
  94.       ) ;_  if
  95.    ) ;_  +
  96.      )
  97.    )
  98.    (if  (not (zerop sum_len))
  99.      (princ
  100. (strcat "\n\t" (cdar lst) " = " (rtos (* sum_len m) 2 4))
  101.      )
  102.    )
  103.    (list (cdar lst)(rtos (* sum_len m) 2 4))
  104. )
  105. (vl-load-com)
  106. (if (null *M*)(setq *M* 1))
  107. (initget 6)
  108. (and
  109.    (princ "\nEnter scale factor <")
  110.    (princ *M*)(princ ">: ")
  111.    (or (setq m (getreal))
  112.   (setq m *M*)
  113.   )
  114.    (setq *M* m)
  115.    (setq ss (ssget "_:L"))
  116.    (setq ss (mapcar
  117.         (function vlax-ename->vla-object)
  118.         (vl-remove-if
  119.     (function listp)
  120.     (mapcar
  121.       (function cadr)
  122.       (ssnamex ss)
  123.     ) ;_  mapcar
  124.         ) ;_ vl-remove-if
  125.       )
  126.    )
  127.    (mapcar '(lambda (x)
  128.         (setq temp (cons (cons x (vla-get-Layer x)) temp))
  129.       )
  130.      ss
  131.    )
  132.    (setq clist  (combine temp
  133.       '(lambda (a b)
  134.          (> (cdr a) (cdr b))
  135.        )
  136.       '(lambda (a b)
  137.          (eq (cdr a) (cdr b))
  138.        )
  139.    )
  140.    )
  141.    (princ
  142.      "\n\n  The total length of all line primitives by layers:"
  143.    )
  144.    (setq temp (mapcar 'mlen4_1 clist))
  145.    (xls temp '("Layer" "Length") nil "mlen41")
  146. )
  147. (princ)
  148. ) ;_  defun
回复

使用道具 举报

63

主题

6297

帖子

6283

银币

后起之秀

Rank: 20Rank: 20Rank: 20Rank: 20

铜币
358
发表于 2022-7-5 21:04:52 | 显示全部楼层
 
不,我的代码将数据导出到两列中。
回复

使用道具 举报

8

主题

41

帖子

33

银币

初来乍到

Rank: 1

铜币
40
发表于 2022-7-5 21:11:59 | 显示全部楼层
 
您只需在由代码创建的excel文件中选择A列,转到“数据”选项卡,将文本转换为列,选择“分隔符”,单击“下一步”,选中分号。它将在单独的列中拆分数量和工厂名称。
 
或者,您可以使用Tharwat的旧代码,从记事本中复制结果并将其粘贴到excel上。我每次都使用它,代码节省了我很多时间。
 
谢谢Tharwat。。
回复

使用道具 举报

发表回复

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

本版积分规则

  • 微信公众平台

  • 扫描访问手机版

  • 点击图片下载手机App

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

GMT+8, 2025-3-11 09:21 , Processed in 0.841223 second(s), 65 queries .

© 2020-2025 乐筑天下

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