Ramees 发表于 2022-7-5 18:45:27

Lisp从csv插入块

你好,CAD向导,
我对lisp的概念还很陌生。然而,我一直在使用autocad脚本来完成我的工作。我要做的是创建一个lisp函数,这样它可以从csv或excel文件中读取x,y坐标和点号,并插入一个现有块,该块在该坐标处具有属性,属性取点号。非常感谢您对编写此lisp的任何帮助。让我再说一遍,我是自动Lisp程序的新手
这是excel文件
首席运营官。xlsx公司
数据格式为
点Xcor Ycor

Tharwat 发表于 2022-7-5 18:55:17

欢迎使用新向导。
 
当您尝试我的下一个程序时,应该存在于图形中的属性块的名称是什么?

Ramees 发表于 2022-7-5 18:59:28

它是Block1
如果不太复杂,是否可以由用户提示:notworthy:
因为我需要插入不同类型的块

Tharwat 发表于 2022-7-5 19:05:59

 
当然
 
试一试,让我知道。
 

(defun c:test (/ _parse do sp bk bn f on st l)
;; Tharwat 13.08.2015        ;;
(setq do (vla-get-activedocument (vlax-get-acad-object))
       sp (vla-get-block (vla-get-activelayout do))
       )
(cond
   ((not (and (setq
                bn
               (getstring t
                            "\nSpecify name of the Attributed Block Name :"
                            )
                )
            (/= bn "")
            (tblsearch "BLOCK" bn)
            )
         )
    (princ (strcat "\nEmpty value or Block name < "
                   bn
                   " > is not existed in current drawing !"
                   )
         )
    )
   ((setq f (getfiled "Select Excel file :"
                      (getvar 'dwgprefix)
                      "csv"
                      16
                      )
          )
    (setq on (open f "r"))
    (defun _parse (s / pos lst)
      (while (setq pos (vl-string-search ";" s 0))
      (progn (setq lst (cons (substr s 1 pos) lst))
               (setq s (substr s (+ pos 2) (strlen s)))
               )
      )
      (if (and s (/= s ""))
      (setq lst (cons s lst))
      )
      (setq lst (reverse lst))
      )
    (while (setq st (read-line on))
      (if (and (setq l (_parse st))
               (= (length l) 3)
               (setq bk (vla-insertblock
                        sp
                        (vlax-3d-point (read (cadr l)) (read (caddr l)))
                        bn
                        1.0
                        1.0
                        1.0
                        0.
                        )
                     )
               )
      (vla-put-textstring
          (car (vlax-invoke bk 'getattributes))
          (car l)
          )
      )
      )
    (close on)
    )
   )
(princ)
)(vl-load-com)

Ramees 发表于 2022-7-5 19:12:28

嗯,试过了,但没用。。。
它要求输入块名,并在给出块名时要求打开csv文件。但打开文件时,什么都没有发生:不确定:
如果你想以防万一进行测试,请点击这里
800.dwg
 
这是我目前用来做这件事的脚本
800.scr

Tharwat 发表于 2022-7-5 19:16:57

另存为Excel文件以格式化csv,然后重试。

Ramees 发表于 2022-7-5 19:21:47

我尝试了csv文件本身。你能看一下我的脚本文件并以相同的顺序验证lisp create命令吗

Tharwat 发表于 2022-7-5 19:28:20

我给了你一个完整的程序,不需要任何其他脚本。
 
1-应将属性块存在于运行程序的当前图形中。
2-EXCL文件应为csv格式。

Ramees 发表于 2022-7-5 19:31:25

不,我没有用剧本
 
是的,我试过用csv文件而不是excel文件

 
我如何加载lisp有问题吗
这是我用过的文件
首席运营官。csv
测验lsp

Tharwat 发表于 2022-7-5 19:34:58

Excel文件coo的内容。在post#9中加载的csv与您在第一次post格式中加载的csv不同
 
返回程序并替换分号(;)带逗号(,)。
 

(vl-string-search ";" s 0)

 
变成这样。
 

(vl-string-search "," s 0)
页: [1] 2
查看完整版本: Lisp从csv插入块