找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 640|回复: 1

[求助] 数据类型错误,求各位前辈、高手帮忙

[复制链接]
发表于 2015-5-25 12:49:30 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?立即注册

×
小弟发现,百度中有一帖《cad 多个单行行字如何复制到excel里》,只能实现单行文本的批量输出,
后整合一个可实现单行、多行文本输出到文本窗口(程序见下文①)后,
得到一程序(详见下文②),运行时显示,参数类型错误,不知该如何修正,烦请各位前辈、高手帮忙,谢谢!

①.本人有一程序,可实现单行、多行文本输出到文本窗口,程序如下:
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
(defun c:wbb ();循环提取单行文本和多行文本至txt文件中
               ;适用于单行文本和某些多行文本(文本不许过长等)               
  (princ "\t提取TEXT/MTEXT文本至文本窗口 ")
  (setq ent t)
  (while ent  
    (setq ent (car (entsel "\n选择文本:")))

     ;;;;;;;;;;;;;;;;;;判断所需的文本类型
      (setq entlist(entget ent))
      (setq entype (cdr(assoc 0 entlist)))
     ;;;;;;;;;;;;;;;;;;判断所需的文本类型end

    (setq dxf (entget ent))
    (setq str0 "")
    (setq txt (cdr (assoc 1 dxf)))
    (setq txt (vl-string-subst "" "{" txt))
    (setq txt (vl-string-subst "" "}" txt))
    (repeat 10
      (setq txt (vl-string-subst "" "\\P" txt));;;;;;替换行符
    )
    (while (setq n (vl-string-search ";" txt))
      (if (= (setq str (substr txt 1 1)) "\\")
        (setq txt (substr txt (+ n 2)))
        (progn
            (setq str0 (strcat str0 (substr txt 1 1)))
            (setq txt (substr txt 2))
        )
      )
    )
    (setq str0 (strcat str0 txt))
    (princ (strcat "=>当前文本为:\t\t " str0))
);end while
(princ)
)


②.经过组合后的程序:
(defun C:WZ ( / n ss &kw L ff %k %k1 %k2 %k3 %k4 %k5 %k6);批量选择文字到
(setvar "cmdecho" 0) ;;关闭变量
(setvar "blipmode" 0);;关闭控制点
(vl-load-com)        ;;加载vlax扩展函数
(setq n 0 ss '())    ;;取得一个空表
(princ "\n请选择文字")
(setq &kw (ssget '((0 . "TEXT,MTEXT"))));选择文字
(if (/= &kw nil);;如果有选择了文字
  (progn
   (setq L (sslength &kw)
         ;ff (open "d://文字到TXT.xls" "w");建立表格
   );;

        (setq rbv-path (getvar "dwgprefix")
              rbv-name (getvar "dwgname")
              fln (strcat rbv-path (substr rbv-name 1 (- (strlen rbv-name) 4) ) ".xls")
        )
        ;寻找当前文件路径以及文件名
        (setq ff (open fln "W"))

   (repeat L
    (setq &kw1 (entget (ssname &kw n))
          %k1 (cdr (assoc 10 &kw1))  ;;取得文字坐标
          ;%k2 (cdr (assoc 1 &kw1))   ;;取得文字内容      
    )

;;;;;;;;;;;;;;;;;;取得文字内容开始
    ;(setq entt (car ent)) ;;;;;;;;;;;;;;;;;entt为<图元名: 7dfa9a00>
    ;(setq dxf (entget entt))

    (setq dxf &kw1)
    (setq str0 "")
    (setq txt (cdr (assoc 1 dxf)))
    (setq txt (vl-string-subst "" "{" txt))
    (setq txt (vl-string-subst "" "}" txt))
    (repeat 10
      (setq txt (vl-string-subst "" "\\P" txt));;;;;;替换行符
    )
    (while (setq n (vl-string-search ";" txt))
      (if (= (setq str (substr txt 1 1)) "\\")
        (setq txt (substr txt (+ n 2)))
        (progn
            (setq str0 (strcat str0 (substr txt 1 1)))
            (setq txt (substr txt 2))
        )
      )
    )
    (setq str0 (strcat str0 txt))
    (princ (strcat "\t当前文本为: " str0))

    ;;str0不是字符串吗?请问,它是什么数据类型?如何将str0转换为字符串,以便赋值给下文的%k2??
    ;;在运行至下一行中会报错

    (princ (strcat "\n当前str0"  "中的文本数量为: " (strlen str0)))
;;;;;;;;;;;;;;;;;;;;取得文字内容结束
    (setq %k2 str0);;;;返回文字内容至%k2


    (setq ss (cons (list %k1 %k2) ss);;加入选择集
          n (+ n 1)
    )
   )
   (setq ss (vl-sort ss (function (lambda (x y)(< (fix (caar x)) (fix (caar y)))))));;X排序

从左到右
   (setq ss (vl-sort ss (function (lambda (x y)(> (fix (cadar x)) (fix (cadar y)))))));;Y排

序从上到下
   (setq &kw1 (nth 0 ss)
         %k1 (caar &kw1);;第一个元素的第一个对象
         %k2 (cadar &kw1);;第一个元素的第二个对象
         %k3 (cadr &kw1);;第二个元素
         n 1
   )
   (repeat (- L 1)
    (setq &kw2 (nth n ss)
          %k4 (caar &kw2)
          %k5 (cadar &kw2)
          %k6 (cadr &kw2)
          %k (- %k2 %k5)
          n (+ n 1)
    )
    (if (> %k 20)
     (progn
      (princ %k3 ff)
      (princ "\n" ff);;不在同一行换行
      (setq %k1 %k4 %k2 %k5 %k3 %k6)
     )
    )
    (if (and (<= %k 20) (< %k1 %k4))
     (progn
      (princ %k3 ff)
      (princ "\t" ff);;同一行不换行;换一个位置
      (setq %k1 %k4 %k2 %k5 %k3 %k6)
     )
    )
    (if (and (<= %k 20) (> %k1 %k4))
     (progn
      (princ %k6 ff)
      (princ "\t" ff)
     )
    )
   )
   (princ %k3 ff)
   (close ff);;关闭文本
  )
)
(prin1);;结束
);;文字复制到记事本,以后缀(.lsp)命名如(wz.lsp);加载到autocad就可以使用。



论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
 楼主| 发表于 2015-6-1 12:55:50 | 显示全部楼层
:(高手都休业了?
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

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

本版积分规则

QQ|申请友链|Archiver|手机版|小黑屋|辽公网安备|晓东CAD家园 ( 辽ICP备15016793号 )

GMT+8, 2024-5-10 16:18 , Processed in 0.285709 second(s), 33 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表