明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 2249|回复: 8

如何用AUTOLISP把AUTOCAD中的明细表读到ECCEL中!

[复制链接]
发表于 2005-10-3 20:54:00 | 显示全部楼层 |阅读模式

如何用AUTOLISP把AutoCAD中的明细表读到ECCEL中!

哪位高手能否指点一下呀!切切!在下不胜感激!

发表于 2005-10-3 21:05:00 | 显示全部楼层
你搜一下吧,应该有不少这方面的文章。
 楼主| 发表于 2005-10-3 21:13:00 | 显示全部楼层
我搜不到这样的文章呀!网路上并没有多少这样的代码呀!真是急呀!哪位高人指点一下呀!我急用呀!
发表于 2005-10-4 21:06:00 | 显示全部楼层

我会的,可以与我联系:Iceberg7512@163.com。(嘿嘿,今天我高兴,平常我都不回帖的)

发表于 2005-10-5 10:43:00 | 显示全部楼层

真希望楼上天天都能高兴

 

 楼主| 发表于 2005-10-5 17:54:00 | 显示全部楼层

真的有办法吗?我会和 你 联系的

 楼主| 发表于 2005-10-5 18:19:00 | 显示全部楼层

大家给我看看下面的程序如何才能用呀!是关于把明细表导出来的一个程序,我看不大懂!有知道的兄弟给指点一下!

;;;本程序应以database.lsp命名

(defun EXTERNALDATA (/ datafile listitem)
  (setq datafile (getfiled "打开文件"
   (strcat path_F "extractdata//")
   "txt"
   8
)
  )
  (setq datafile (open datafile "r"))
  (setq listitem (read-line datafile))
  (start_list "Referlist" 2)
  (while (/= listitem nil)
    (add_list listitem)
    (setq listitem (read-line datafile))
  )
  (end_list)
  (close datafile)
)

(defun DBASEDIA_ID (/ DBASEDIA_ID do_what)
  (setq DBASEDIA_ID (load_dialog (strcat path_F "database.dcl")))

  (if (> DBASEDIA_ID 0)
    (progn
      (setq do_what 4)
      (while (> do_what 1)
(if (new_dialog "database" DBASEDIA_ID)
    (action_tile "b_externaldata" "(EXTERNALDATA)")
    (action_tile "edb_Type" "(setq oftype $value)")
    (set_tile "DWGNAME" (strcat (getvar "DWGPREFIX") DWGNAME))
    (set_tile "DWGNO" DWGNO)
    (action_tile
      "scale_val"
      (strcat
"(progn"
"(setq scale_valuetmp $value)"
")"
      )
    )
    (action_tile "typ_list" "(setq typlist (atoi $value))")
    (action_tile "database_pick" "(done_dialog 3)")
    (action_tile "database_ok" "(done_dialog 1)")
    (setq do_what (start_dialog))
    (cond
      (
       (= do_what 3)
       (progn
(setq p0 (getpoint "请选择开始点:"))
       )
      )
    )
  )
  (setq do_what 0)
)
(unload_dialog DBASEDIA_ID)

      )
    )
  )

)

(defun SELE_TYPE ()
  (cond
    ((= typlist 0)
     (setq oftype "*"
   MyList "list"
     )
    )
    ((= typlist 1)
     (setq oftype "阀"
   MyList "valve"
     )
    )
    ((= typlist 2)
     (setq oftype "法兰"
   MyList "flange"
     )
    )
    ((= typlist 3)
     (setq oftype "管"
   MyList "pipe"
     )
    )
    ((= typlist 4)
     (setq oftype "座"
   MyList "support"
     )
    )
    ((= typlist 5)
     (setq oftype "接头"
   MyList "joint"
     )
    )
    ((= typlist 6)
     (setq oftype "三通"
   MyList "Tvalve"
     )
    )
    ((= typlist 7)
     (setq oftype "弯头"
   MyList "bendedpipe"
     )
    )
  )
)

(defun DBASE_LIST ()
  (start_list "typ_list" 2)
  (add_list "全部")
  (add_list "阀")
  (add_list "法兰")
  (add_list "管")
  (add_list "座")
  (add_list "接头")
  (add_list "三通")
  (add_list "弯头")
  (end_list)
)

(defun C:DBASE (/    p0       p1 cancel_rea s0
s1    s2       s3 s4     s5
s6    s7       ID ITEM     DRAWING_NO
NAME    MATERIAL   NUMBER SGL_WEIGHT GBL_WEIGHT
ATTNOTE    var_SS     var_TEXT var_P0     var_P1
DWGNAME    DWGNO      len_DWGNAME     num_ITEM
typlist    oftype     MyList var_Filenum
var_File   path_F     len_path LUNITS     LUPREC
DH    scale_valuetmp str_Scale
       )
;;;  (setvar "CMDECHO" 0)
  (setvar "OSMODE" 1)
  (setq LUNITS (getvar "LUNITS"))
  (setq LUPREC (getvar "LUPREC"))
  (setvar "LUNITS" 2)
  (setvar "LUPREC" 4)
  (setq path_F (findfile "database.lsp"))
  (setq len_path (strlen path_F))
  (setq path_F (substr path_F 1 (- len_path (strlen "database.lsp"))))
  (setq DWGNAME (getvar "DWGNAME"))
  (setq DH (getreal "\n请输入明细表行间距: "))
  (setq len_DWGNAME (strlen DWGNAME))

  (setq DWGNO
(strcat
   "LISP"
   "-"
   (substr DWGNAME 1 3)
   "-"
   (substr DWGNAME 4 3)
)
  )
  (if (>= len_DWGNAME 14)
    (setq DWGNO
   (strcat
     DWGNO
     "-"
     (substr DWGNAME 10 (- len_DWGNAME 13))
   )
    )
  )
  (setq scale_value (read scale_valuetmp))

  (if (>= scale_value 1)
    (setq str_Scale (strcat "1:" (rtos scale_value 2 0)))
    (setq str_Scale (strcat (rtos (/ 1 scale_value) 2 0) ":1"))
  )
  (setvar "MODEMACRO" DWGNO)
  (DBASEDIA_ID)
  (if (/= cancel_rea 1)
    (progn
      (setvar "CMDDIA" 0)
      (SELE_TYPE)
       (if (>= scale_value 1)
(setq str_Scale (strcat "1:" (rtos scale_value 2 0)))
(setq str_Scale (strcat (rtos (/ 1 scale_value) 2 0) ":1"))
      )
      (if (= nil varFilenum)

(progn
  (setq varFilenum
(getfiled
   "请选择明细表文件"
   (strcat path_F "extractdata\\")
   "txt"
   1
)
  )
     )
)
      )
      (CREATEFILE varFilenum)
      (setq num_ITEM 0)
      (setq SYS_ID (substr DWGNAME 1 3))
      (setq ID (strcat (substr DWGNAME 1 3) (rtos num_ITEM 2 0)))
      (setq p1 (polar p0 (* 0.5 pi) (* scale_value DH)))
      (GETITEM)
      (REPEATWRITE)
      (initget 1 "Yes No")
      (setq kwd (getkword "\n本图明细表完整了吗(Yes或No)? "))
      (if (= kwd "No")
(progn
  (setq p0 (getpoint "请选择开始点:"))
  (setq p1 (polar p0 (* 0.5 pi) (* scale_value DH)))
  (GETITEM)
  (REPEATWRITE)
)
      )
;;;      (command "zoom" "p")
    )
  )
  (setvar "LUNITS" LUNITS)
  (setvar "LUPREC" LUPREC)
  (setvar "CMDDIA" 1)
  (setvar "CMDECHO" 1)
)

(defun GETITEM ()
  (setq ITEM (EXTRACT 8 0))
  (setq DRAWING_NO (EXTRACT 43 8))
  (setq NAME (EXTRACT 103 43))
  (setq MATERIAL (EXTRACT 123 103))
  (setq NUMBER (EXTRACT 133 123))
  (setq SGL_WEIGHT (EXTRACT 144.5 133))
  (setq GBL_WEIGHT (EXTRACT 156 144.5))
  (setq ATTNOTE (EXTRACT 180 156))


)
(defun REPEATWRITE ()
  (while
    (or
      (/= ITEM "")
      (/= DRAWING_NO "")
      (/= NAME "")
      (/= MATERIAL "")
      (/= NUMBER "")
      (/= SGL_WEIGHT "")
      (/= GBL_WEIGHT "")
      (/= ATTNOTE "")
    )
     (setq ITEM (EXTRACT 8 0))
     (setq DRAWING_NO (EXTRACT 43 8))
     (setq NAME (EXTRACT 103 43))
     (setq MATERIAL (EXTRACT 123 103))
     (setq NUMBER (EXTRACT 133 123))
     (setq SGL_WEIGHT (EXTRACT 144.5 133))
     (setq GBL_WEIGHT (EXTRACT 156 144.5))
     (setq ATTNOTE (EXTRACT 180 156))
     (if
       (OR
(wcmatch ITEM (strcat "*" oftype "*"))
(wcmatch DRAWING_NO (strcat "*" oftype "*"))
(wcmatch NAME (strcat "*" oftype "*"))
(wcmatch MATERIAL (strcat "*" oftype "*"))
(wcmatch NUMBER (strcat "*" oftype "*"))
(wcmatch SGL_WEIGHT (strcat "*" oftype "*"))
(wcmatch GBL_WEIGHT (strcat "*" oftype "*"))
(wcmatch ATTNOTE (strcat "*" oftype "*"))

       )
(if
  (or (not (and (wcmatch NAME "*接头*") (= oftype "管")))
      (not (and (wcmatch NAME "*电磁阀*") (= oftype "三通")))
  )
   (progn
     (APPENDFILE varFilenum)
     (setq num_ITEM (+ num_ITEM 1))
   )
)
     )
     (setq p0 p1)
     (setq p1 (polar p0 (* 0.5 pi) (* scale_value DH)))
  )

)

(defun CREATEFILE (Fn / f_open)
  (setq f_open (open Fn "a"))
  (write-line " " f_open)
  (write-line (strcat DWGNAME "    " DWGNO) f_open)

  (write-line
    (strcat
      "序号" " " "图号或标准号"      " " "名称"
      " " "材料"   " "   "数量"    " " "单重"
      " " "总重"   " "   "附注"
     )
    f_open
  )
  (close f_open)
)

(defun APPENDFILE (Fn / f_open)
  (setq f_open (open Fn "a"))
  (write-line
    (strcat
      ITEM
      " "
      DRAWING_NO
      " "
      (STRINGFUN (STRINGFUN NAME))
      " "
      MATERIAL
      " "
      NUMBER
      " "
      SGL_WEIGHT
      " "
      GBL_WEIGHT
      " "
      ATTNOTE
    )
    f_open
  )
  (close f_open)
  (princ (strcat
   "\n"
   ITEM
   "\t"
   DRAWING_NO
   "\t"
   (STRINGFUN (STRINGFUN NAME))
   "\t"
   MATERIAL
   "\t"
   NUMBER
   "\t"
   SGL_WEIGHT
   "\t"
   GBL_WEIGHT
   "\t"
   ATTNOTE
)
  )
)

(defun EXTRACT (DIS0 DIS1 / var_SS var_tmpText var_TEXT tmpInsX tmpTxt)

  (if
    (/=
      (setq var_SS
     (ssget "w"
    (polar p1 0 (* scale_value DIS1))
    (polar p0 0 (* scale_value DIS0))
     )
      )
      nil
    )
     (progn
       (setq intN 0)
       (setq intM 0)
       (while (< intM (sslength var_SS))
(if
   (or
     (= (cdr (assoc 0 (entget (ssname var_SS intM)))) "TEXT")
     (= (cdr (assoc 0 (entget (ssname var_SS intM)))) "MTEXT")
   )
    (progn
      (set (read (strcat "varInsX[" (rtos intN) "]"))
   (cadr (assoc 10 (entget (ssname var_SS intM))))
      )

      (set (read (strcat "varText[" (rtos intN) "]"))
   (cdr (assoc 1 (entget (ssname var_SS intM))))
      )

      (setq intN (+ intN 1))

    )
)
(setq intM (+ intM 1))

       )
       (if (>= intN 1)
(progn
   (setq i intN)
   (setq k 0)
   (while (> i 1)
     (setq j 0)
     (while (< j (- i 1))
       (if
(> (eval (read (strcat "varInsX[" (rtos j) "]")))
    (eval
      (read (strcat "varInsX[" (rtos (+ j 1)) "]"))
    )
)
  (progn

    (setq tmpInsX
   (eval (read (strcat "varInsX[" (rtos j) "]")))
    )
    (setq
      tmpTxt
       (eval (read (strcat "varText[" (rtos j) "]")))
    )
    (set
      (read (strcat "varInsX[" (rtos j) "]"))
      (eval
(read (strcat "varInsx[" (rtos (+ j 1)) "]"))
      )
    )
    (set
      (read (strcat "varText[" (rtos j) "]"))
      (eval
(read (strcat "varText[" (rtos (+ j 1)) "]"))
      )
    )

    (set
      (read (strcat "varInsX[" (rtos (+ j 1)) "]"))
      tmpInsX
    )
    (set
      (read (strcat "varText[" (rtos (+ j 1)) "]"))
      tmpTxt
    )

  )
       )
       (setq j (+ j 1))

     )
     (setq i (- i 1))
   )
   (setq i 0)
   (setq var_TEXT "")
   (while (< i intN)
     (setq var_TEXT
    (strcat var_TEXT
    (eval (read (strcat "varText[" (rtos i))))
    )
     )
     (setq i (+ i 1))

   )
)
(setq var_TEXT varTEXT[0])
       )
     )
     (setq var_TEXT "")
  )
  (setq var_TEXT (STRINGFUN var_TEXT))
)


(defun STRINGFUN (varStrings / lenStrings lenString
  strString  strA strB    strC
  intII
)
  (if (or
(wcmatch varStrings "*%%216*")
(wcmatch varStrings "*%%[cCdDpP]*")
      )
    (progn
      (setq lenStrings (strlen varStrings))
      (cond
((wcmatch varStrings "*%%216*")
(setq strString "%%216"
       strSymbol "δ"
       lenString (strlen strString)
)
)
((wcmatch varStrings "*%%c*")
(setq strString "%%c"
       strSymbol "φ"
       lenString (strlen strString)
)
)
((wcmatch varStrings "*%%C*")
(setq strString "%%C"
       strSymbol "φ"
       lenString (strlen strString)
)
)
((wcmatch varStrings "*%%D*")
(setq strString "%%D"
       strSymbol "°"
       lenString (strlen strString)
)
)
((wcmatch varStrings "*%%d*")
(setq strString "%%d"
       strSymbol "°"
       lenString (strlen strString)
)
)
((wcmatch varStrings "*%%p*")
(setq strString "%%p"
       strSymbol "±"
       lenString (strlen strString)
)
)
((wcmatch varStrings "*%%P*")
(setq strString "%%P"
       strSymbol "±"
       lenString (strlen strString)
)
)
      )
      (if (wcmatch varStrings (strcat "*" strString "*"))
;strString =%%216、%%C、%%D、%%P
;strSymbol =δ、φ、°、±
(progn
  (setq intII 1)
  (setq strB (substr varStrings intII (strlen strString)))
  (while (/= strB strString)
    (setq intII (+ intII 1))
    (setq strB (substr varStrings intII (strlen strString)))
  )
  (if (> intII 2)
    (setq
      strA (substr varStrings
   1
   (- intII 1)
   )
    )
  )
  (if (< intII (strlen varStrings))
    (setq strC (substr varStrings (+ intII (strlen strString))))
  )
;(setq strB strSymbol)
  (if (or (= nil strA) (= nil strC))
    (progn
      (if (= nil strA)
(setq varStrings (strcat strSymbol strC))
      )
      (if (= nil strC)
(setq varStrings (strcat strA strSymbol))
      )

      (if (and (= nil strA) (= nil strC))
(setq varStrings strSymbol)
      )
    )
    (setq varStrings (strcat strA strSymbol strC))

  )
)
      )
    )
  )
  (setq varStrings varStrings)
)

;;; 下面是对话框database.dcl
database:dialog
{
label="明细表操作";
   :list_box
{
label="明细表列表";
height=10;
tabs="8 35 75 85 90 100 110";
fixed_height=true;
width=140;
fixed_width=true;
key="Referlist";
}
:boxed_row
{
label="零部件/设备类型";
:list_box
{
width=15;
fixed_width=true;
fixed_height=true;
key="typ_list";
}
:column
{
height=3;fixed_height=true;alignment=top;
:text
{
label="输入类型";
}
:edit_box
{
key="edb_Type";
}
:edit_box
{
label="图名";
key="DWGNAME";
}
:edit_box
{
label="图号";
key="DWGNO";
}
}
}
:row
{
fixed_width=true; alignment=centered;
:button
{
label="选点<&";
fixed_width=true;
key="database_pick";
is_default=true;
}
:edit_box
{
label="比例";
fixed_width=true;
value=1;
key="scale_val";
}
}
:row
{
fixed_width=true;alignment=centered;
:button
{
label="确定";
fixed_width=true;
alignment=left;
key="jn_ok";
action="(setq database_rea $reason)";
}
:button
{
label="打开文件";
fixed_width=true;
alignment=right;
key="b_externaldata";
}
:button
{
label="取消";
fixed_width=true;
alignment=right;
is_cancel=true;
action="(setq cancel_rea $reason)";
}
}
}

 楼主| 发表于 2005-10-5 18:22:00 | 显示全部楼层
我调试了一下,下面的对话框可以出来,可是上面的DATEBASE.LSP却是用问题,我不知道怎么改呀!望高手指教一下!不胜感激!
发表于 2013-1-26 15:51:29 | 显示全部楼层
估计这个程序访问的对象有固定的格式,不好猜测
您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|CAD论坛|CAD教程|CAD下载|联系我们|关于明经|明经通道 ( 粤ICP备05003914号 )  
©2000-2023 明经通道 版权所有 本站代码,在未取得本站及作者授权的情况下,不得用于商业用途

GMT+8, 2025-6-1 05:53 , Processed in 0.179784 second(s), 25 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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