iyant 发表于 2022-7-5 20:17:14

将数据点导出到excel fil

需要帮助
如何使用LISP将CAD的数据点XY导出到excel文件中,例如XY。xls公司
并放置在特定的电池板中,例如X=Y=电池c2 d2
 
非常感谢。

hanhphuc 发表于 2022-7-5 20:26:15

 
最简单的方法是
另存为*。csv逗号分隔格式
然后用excel打开
例子:

;V1.1:04/12/2014
;PXYZ test.csv saved to dwgprefix
;add numbering PXYZ format
;index i 1+ incremental
;notified by alert
;optional: add Text numbering
;optional: open notepad
;optional: open directory


(vl-load-com)

(defun c:P2F ( / *error* p i ss fn pt )
;hanhphuc 2014
(defun *error* (msg)
   
    (if        (not (wcmatch (strcase msg) "*CANCEL*,*EXIT*"))
      
      (princ (strcat "\nError: " msg))
      
    )
   
    (if        p
      
      (close p)
      
    )

    (princ)
   
)

(if
    (and

      (setq i0
          
          ss (ssget ":L" '((0 . "POINT")))
          
           )
      
           (setq fn

                  (strcat (getvar "dwgprefix")

                          "PXYZ test.csv") ; rename you file
               )
      
           (setq p (open fn "w"))
      
      )
   
    (progn
                                        ;(setq i 0)
      (repeat

        (sslength ss)
       
        (

       (lambda (str)
          
           (foreach x

                  (setq pt

                           (vlax-get
                             
                               (vlax-ename->vla-object (ssname ss i))
                               
                               'coordinates
                               
                             )
                          
                      )
             
             (setq str (strcat str (rtos x 2) ","))
             
           )
          
           (write-line
      
       (strcat (itoa (setq i (1+ i))) "," str)
      
       p)
          
       )
          
          ""
          
        )
       
        (entmakex

          (list

                  '(0 . "TEXT")
               
                     (cons 1 (itoa i))
               
                (cons 10 pt)
               
                (8 . "EXPORTED")
               
                (cons 40 (getvar 'TEXTSIZE))
               
          )
          
        )
       
      )
      
      (if p
       
        (close p)
       
      )
      
      (alert
       
        (strcat
          
          "\nSyabas! Saved in \""
          
          fn
          ;"\"\nOK -> \"PXYZ test.csv\" -> Right-Click -> Open With -> EXCEL"
        )
      )
      
;;;(command "_SHELL" (strcat "explorer \"" (getvar "dwgprefix") "\"")) ;<-- optional
      
      (vl-cmdf "_START" (strcat "EXCEL \"" fn "\""))
      
      (startapp "notepad" fn)
      
      ;; <--optional open as notepad preview

    )
   
    (alert "\n:-( knp xde POINT ?! ")
   
)

(princ)

)

 
将文件保存在DWG的目录中

stevesfr 发表于 2022-7-5 20:30:56

该例程查找Autocad“点”,如果它们实际上是LDD点,则可能无法工作,如上所述,LDD需要不同的代码。

Tharwat 发表于 2022-7-5 20:36:03

 
只需单击,它将存储XY值,而不必是几何空间点。

stevesfr 发表于 2022-7-5 20:41:36

 
试试这个节目,让我知道。
 

(DEFUN C:Exportpnt (/       FILE    FILENAME             ANS   CNT
             PT      X       Y       Z       LINE    DESC
             LINECOUNTER   LINEDATA             LEN   OSM
              )
(SETQ OSM (GETVAR "OSMODE"))

(COMMAND "OSMODE" 0)
;;
;; THIS WILL SET THE FILE NAME WE ARE WRITTING TO AS WELL AS CHECK
;; TO MAKE SURE THAT WE ARE WRITTING AT THE END OF THE FILE
;;
(SETQ LINECOUNTER 0)
(SETQ FILE (GETSTRING "\nNAME OF POINTS FILE TO OPEN:..."))
(SETQ FILENAME (OPEN FILE "A"))
(CLOSE FILENAME)
(SETQ FILENAME (OPEN FILE "R"))
(WHILE
   (SETQ LINEDATA (READ-LINE FILENAME))
    (SETQ LEN (STRLEN LINEDATA))
    (SETQ LINECOUNTER (+ 1 LINECOUNTER))
)
(CLOSE FILENAME)
(SETQ FILENAME (OPEN FILE "A"))
(INITGET "Yy Nn")
(SETQ
   ANS        (GETKWORD "\n ADD DESCRIPTIONS? Yes OR No ?:...")
   CNT        (GETINT "\nENTER NUMBER OF POINTS TO EXPORT:...")
   PT        (GETPOINT "\nSELECT POINT TO EXTRACT:....")
)


;;
;; THIS BEGINS THE REPEAT LOOP TO EXTRACT THE POINT INFORMATION
;;
(REPEAT CNT
   (IF
   ( = ANS "Yy")
      (SETQ DESC (GETSTRING "\nENTER DESCRIPTION:..."))
   )
   (SETQ
   X                  (RTOS (CAR PT))
   Y                  (RTOS (CADR PT))
   Z                  (RTOS (CADDR PT))
   LINECOUNTER (+ 1 LINECOUNTER)
   )
   (IF        (= ANS "Yy")
   (SETQ LINE (STRCAT (ITOA LINECOUNTER) "," Y "," X "," Z "," DESC))
   (SETQ LINE (STRCAT (ITOA LINECOUNTER) "," Y "," X "," Z))
   )
   (WRITE-LINE LINE FILENAME)
   (SETQ PT (GETPOINT "\nSELECT NEXT POINT TO EXTRACT:..."))
)                                        ;END OF REPEAT LOOP

(CLOSE FILENAME)

;; RESET THE OSNAP MODE

(COMMAND "OSMODE" OSM)
(PRINC)
)

JSYoung81 发表于 2022-7-5 20:45:43

感谢Tharwat、BIGAL、JSYoung81、stevesfr的协助,非常感谢。
我昨晚睡得很早
 
很抱歉post#2中更新的缺失(vl load com)代码
注意:此代码仅导出acad AcDbPoint,而不导出AECC point!
 
 
我偶然发现了你的旧线索
AECC\u坐标几何点应为LDD和C3D的不同方法属性
 
嗨,我们又见面了
是的,你的代码可以工作,因为它只是创建了新的增量点

VVA公司

BIGAL 发表于 2022-7-5 20:52:36

 
 
 
 
塔瓦特
https://www.cadtutor.net/forum/images/statusicon_cadtutor/user-offline.png
可以更改此代码,以便自动输入我们之前必须制作的excel文件?

JSYoung81 发表于 2022-7-5 21:00:17

两个月后,我对那些试图免费帮助你的人没有任何尊重。

Tharwat 发表于 2022-7-5 21:02:53

hanhphuc 发表于 2022-7-5 21:06:56

Thanks Tharwat,BIGAL,JSYoung81,stevesfr for assisting thread very appreciated.
i slept early last night
 
sorry. missing (vl-load-com) code updated in post#2
note: this code only Exports acad AcDbPoint, NOT AECC point!
 
 
i came across your old thread
AECC_COGO_POINT , should be different method property for LDD & C3D
 
hi JSYoung81 we meet again
yes your code works because it just creates new incremental points, here are similar threads by
Lee
VVA
页: [1] 2
查看完整版本: 将数据点导出到excel fil