--访-- 发表于 2024-4-24 08:38

求大神一个AutoCAD2020 的 LISP 程序,用于将csv表格中的数据转换为属性块的属性值

本帖最后由 --访-- 于 2024-4-24 13:46 编辑

求大神帮写一个 LISP 程序,用于将 CSV 表格中的数据转换为属性块的属性值,程序会提示选择一个图框,然后选择数据表的行,循环并将逐一匹配到属性块中。
以下代码为AI生成,请帮忙看下,这个代码加载到CAD2020里有错误

(defun cCSV ()
;; 选择CSV文件
(setq csvPath (getfiled 选择CSV文件csv 1))
(if (or (null csvPath) (= csvPath ))
    (progn
      (princ n没有选择文件。)
      (exit)
    ))

;; 读取CSV文件内容
(setq csvData (vl-file-read csvPath))
;; 将CSV数据按行分割
(setq csvLines (strcat ( (vl-string-subst )( n csvData) )))
;; 将每行数据转换为列表
(setq csvLines (read csvLines))

;; 获取属性名称,并去除可能的引号
(setq headers (mapcar (function (lambda (str) (vl-string-trimstr))) (car csvLines)))

;; 获取数据行
(setq dataLines (cdr csvLines))

;; 循环处理每行数据
(foreach row dataLines
    (setq attribValues (mapcar (function (lambda (str) (vl-string-trimstr))) row))

    ;; 选择图框(属性块参照)
    (setq blockRef (entsel n选择包含属性的图框 ))
    (if (null blockRef)
      (progn
      (princ n未选择图框。)
      (exit)
      )
    )
    (setq blockRef (car blockRef))

    ;; 遍历属性名称,更新属性值
    (setq i 0)
    (foreach header headers
      ;; 查找属性标签
      (setq attribTag header) ; 直接使用属性名称作为标签
      ;; 更新属性值
      (setq attribPair (assoc 2 (entget blockRef)))
      (if attribPair
      (entmod (subst (cons 1 (nth i attribValues)) attribPair (entget blockRef)))
      (princ (strcat n属性header未找到。))
      )
      (setq i (1+ i))
    )
    ;; 更新图框
    (entupd blockRef)
)
(princ)
)

(princ n输入 CSV 来运行。)

ssyfeng 发表于 2024-4-24 08:38


ssyfeng 发表于 2024-4-24 08:41

本帖最后由 ssyfeng 于 2024-4-24 08:43 编辑

现在AI写的代码还是不行
不上图和文件,别人很难帮你写的

--访-- 发表于 2024-4-24 09:03

本帖最后由 --访-- 于 2024-4-24 09:22 编辑

CSV表格数据和dwg样板已经上传

--访-- 发表于 2024-4-24 09:09

ssyfeng 发表于 2024-4-24 08:41
现在AI写的代码还是不行
不上图和文件,别人很难帮你写的

大佬请帮忙看看,谢谢

ssyfeng 发表于 2024-4-24 11:48

csv文件还转成PDF?
可加我QQ

--访-- 发表于 2024-4-24 13:41

本帖最后由 --访-- 于 2024-4-24 13:48 编辑

ssyfeng 发表于 2024-4-24 11:48
csv文件还转成PDF?
可加我QQ
csv不能上传,已经改压缩文件上传,已加QQ

chinafoxno1 发表于 2024-5-18 06:54

好想法,可以实现了没
页: [1]
查看完整版本: 求大神一个AutoCAD2020 的 LISP 程序,用于将csv表格中的数据转换为属性块的属性值