Tharwat 发表于 2022-7-6 00:09:36

试试看,通过选择所有维度和属性块让我知道。
 
(defun c:Test (/ ss i sn vl p lst bks s d at l a f o)
;;    Author : Tharwat Al Shoufi    ;;
;;    Date :    08. Feb. 2014      ;;
(princ
   "\n Select Dimensions with Attributed Block < Buble > "
)
(if (setq ss (ssget '((-4 . "<OR")
                     (0 . "DIMENSION")
                     (-4 . "<AND")
                     (0 . "INSERT")
                     (2 . "Buble")
                     (-4 . "AND>")
                     (-4 . "OR>")
                      )
            )
   )
   (repeat (setq i (sslength ss))
   (setq sn (ssname ss (setq i (1- i)))
         vl (vlax-ename->vla-object sn)
   )
   (if (eq (cdr (assoc 0 (entget sn))) "DIMENSION")
       (progn
         (if (/= (vla-get-Arrowhead1Block vl)
               "None"
             )
         (setq p (cdr (assoc 13 (entget sn))))
         (setq p (cdr (assoc 14 (entget sn))))
         )
         (setq
         lst
            (cons (list p
                        (rtos (cdr (assoc 42 (entget sn))) 2 0)
                  )
                  lst
            )
         )
       )
       (setq bks (cons (list (cdr (assoc 10 (entget sn))) vl) bks))
   )
   )
)

(foreach x lst
   (if (and (car x) (car bks))
   (progn
       (setq d(distance (car x) (caar bks))
             at (cadr (car bks))
       )
       (foreach e bks
         (if (< (setq a (distance (car x) (car e))) d)
         (setq da
               at (cadr e)
         )
         )
       )
   )
   )
   (if bks
   (setq l
            (cons
            (append
                (mapcar '(lambda (u)
                           (list (vla-get-tagstring u) (vla-get-textstring u))
                         )
                        (vlax-invoke at 'getattributes)
                )
                (list
                  (cadr x)
                )
            )
            l
            )
   )
   )
   (setq lst (cdr lst))
)
(if l
   (progn
   (setq l (vl-sort l
                      '(lambda (j k)
                         (< (atof (cadr (car j)))
                            (atof (cadr (car k)))
                         )
                     )
             )
   )
   (if (and (setq f
                     (strcat
                     (getvar 'DWGPREFIX)
                     (vl-filename-base (getvar 'DWGNAME))
                     ".csv"
                     )
            )
            (setq o (open f "w"))
         )
       (progn
         (setq s
                (cond ((vl-registry-read
                         "HKEY_CURRENT_USER\\Control Panel\\International"
                         "sList"
                     )
                      )
                      (",")
                )
         )
         (write-line
         (strcat "NUMBER"      s       "DIMENSION"   s
                   "HEIGHT"      s       "H1"    s       "H2"
                   s       "H4"    s       "3F"
                  )
         o
         )
         (foreach u l
         (write-line
             (strcat
               (nth 1 (nth 0 u))
               s
               (nth 6 u)
               s
               (nth 1 (nth 1 u))
               s
               (nth 1 (nth 2 u))
               s
               (nth 1 (nth 3 u))
               s
               (nth 1 (nth 4 u))
               s
               (nth 1 (nth 5 u))
             )
             o
         )
         )
         (close o)
         (princ (strcat "\n File path : < " f " > "))
       )
       (alert "Unable to open or create CSV file for writing !!")
   )
   )
)
(princ)
)
(vl-load-com)

minhphuong_humg 发表于 2022-7-6 00:14:10

 
非常感谢塔瓦。
我有一些意见
-文件输出(*.csv)仍然分组到一列中,而不拆分其他列(B、C、D…)。
-在(D(H1)| E(H2)| F(H4)| G(3F))列中,该列中的值为数字(1,2,3….)不要(H1、H2、H3、3F…)。列的值取在H1、H2、H4、3F的数量之前(例如:H1=1H1-->获取值1;2H1-->获取值2;H4=1H4-->获取值1;3-3F-->获取值3;3F-->获取值1;…)
请帮我编辑你的Lisp程序。
非常感谢你。

Tharwat 发表于 2022-7-6 00:18:36

虽然第一个代码在我的系统中工作,但请尝试上面修改的代码,并让我知道。
 
以上更新的代码

minhphuong_humg 发表于 2022-7-6 00:20:24

 
非常感谢塔瓦。
我有一些意见:
1文件输出结果拆分到其他列。但是,列中的值Ạ 如果值为2.10=2.1,16.10-->16.1,125.10-->125.1,则缺少数字0。摘要逗号后缺少数字0。
2-列(D(H1)| E(H2)| F(H4)| G(3F))中的值是数字(1,2,3….)不获取值(H1、H2、H3、3F…)。列的值取在H1、H2、H4、3F的数量之前(例如:H1=1H1-->获取值1;2H1-->获取值2;H4=获取值1;3-3F-->获取值3;3F-->获取值1;…)
零件编号:
情况2(例如:单元格A1(Excel中)=H1)相同的函数:如果(A1=“H1”,1,在Excel中为左(A1,1)。我不知道AutoLISP的性能如何。
求求你,塔瓦帮帮我!
非常感谢塔瓦。

Tharwat 发表于 2022-7-6 00:25:02

这里一切都很顺利,你可能需要在另一台机器上试用,或者我们可能会等待这里的任何用户试用并通知我们。

Tharwat 发表于 2022-7-6 00:28:32

希望有人会尝试的代码,让我们知道结果的excel文件(如果值在一个或单独的列)。

minhphuong_humg 发表于 2022-7-6 00:30:13

塔瓦特局长。
我想他们不明白我的意见。
请查看图片以区别2结果。
 

 
请帮帮我。非常感谢塔瓦。

Tharwat 发表于 2022-7-6 00:34:36

 
我会考虑这个短语,因为英语不是你的母语,所以我会忽略它。
 
回到主题,
 
按Excel中的第一个单元格选择整个列A,然后右键单击->常规->数字,然后根据需要增加小数。

minhphuong_humg 发表于 2022-7-6 00:36:58

 
对我是越南人。我知道语言是我们的障碍。
请帮助我,案例2是获取列H1、H2、H4、3-3F中的值。非常感谢你!
所以请大家查看图片。
非常感谢你。
页: 1 [2]
查看完整版本: 帮助,获取值属性Blo