Đến nội dung


Hình ảnh
- - - - -

Lisp xuất text khối lượng sang excell theo hàng và cột


  • Please log in to reply
9 replies to this topic

#1 Tuynh

Tuynh

    biết vẽ arc

  • Members
  • PipPip
  • 46 Bài viết
Điểm đánh giá: 1 (bình thường)

Đã gửi 09 April 2014 - 08:46 AM

Trên diễn đàn cũng có nhiều lisp xuất text sang excel nhưng vẫn không được như ý em, nên em mạo muội lập một topic mới mong các bác giúp đỡ:

Lisp yêu cầu là quét chọn một loạt sau đó xuất text sang excel theo hàng và theo cột. 

em có up lên file cad và file excel sau khi dùng lisp được như vậy mong các bác giúp em với

http://www.mediafire...lp/Text Cad.dwg

http://www.mediafire.../Khoi luong.xls


  • 0

#2 Tot77

Tot77

    biết lệnh adcenter

  • Members
  • PipPipPipPipPipPipPip
  • 990 Bài viết
Điểm đánh giá: 498 (tốt)

Đã gửi 09 April 2014 - 12:10 PM

Bạn chọn 4 text màu vàng rồi enter 1 cái, nó xuất ra file "dao dap.txt" ở thư mục cùng file cad.

Mỗi lần chọn 4 text rồi enter. Muốn dứt lệnh thì enter thêm cái nữa.

Tôi không biết đưa ra excel thế nào nên chỉ đưa ra txt thôi.

 

(defun c:test(/ file)
  (defun dxf(id v) (acet-dxf id (entget v)))
  (defun layText() (dxf 1 (nth (setq n (1+ n)) L)))
  (setq file (open (strcat (getvar "dwgprefix") "Dao dap.txt") "a"))
  (write-line "S bun\tS dao\tS dap duong\tS dap bp kenh" file)
  
  (while (setq ss (ssget '((0 . "*TEXT") (1 . "~*[~-0--9]*"))))
     (setq L (vl-sort (acet-ss-to-list ss)
      '(lambda(x y) (> (cadr (dxf 11 x)) (cadr (dxf 11 y)))))
  n -1)
    (while (< n (1- (length L)))
      (write-line (strcat (layText) "\t"  (layText) "\t" (layText) "\t" (layText)) file))
  )
  (close file)
)

 

Không thể chọn một loạt 1 lần được vì thứ tự các text chưa chắc đã canh đúng.


  • 0

#3 Tuynh

Tuynh

    biết vẽ arc

  • Members
  • PipPip
  • 46 Bài viết
Điểm đánh giá: 1 (bình thường)

Đã gửi 09 April 2014 - 05:33 PM

Cám ơn bạn. Mình load lisp khi thực hiện lệnh thì bị lỗi  ; error: no function definition: ACET-SS-TO-LIST

Mình rất muốn chọn một loạt, cứ coi như các text thẳng hàng 


  • 0

#4 Tot77

Tot77

    biết lệnh adcenter

  • Members
  • PipPipPipPipPipPipPip
  • 990 Bài viết
Điểm đánh giá: 498 (tốt)

Đã gửi 09 April 2014 - 06:40 PM

Bạn không cài Express sao? nên mới có lỗi như vậy, tôi sửa lại như sau.

Bạn có thể chọn 1 lượt nhưng bảo đàm là text số liệu phải trong layer "DIENDIENTICH".

 

(defun c:test(/ file L L1 n)
  (defun dxf(id v) (cdr (assoc id (entget v))))
  (defun layText() (dxf 1 (nth (setq n (1+ n)) L1)))
  (defun ssto(ss) (if ss (vl-remove-if 'listp (mapcar 'cadr (ssnamex ss))) nil))
  ;;;
  (setq file (open (strcat (getvar "dwgprefix") "Dao dap.txt") "a"))
  (write-line "S bun\tS dao\tS dap duong\tS dap bp kenh" file)
  (setq L (vl-sort (ssto (ssget '((0 . "*TEXT")(8 . "DIENDIENTICH") (1 . "~*[~-0--9]*"))))
       '(lambda(x y) (< (car (dxf 11 x)) (car (dxf 11 y))))))
  (while L
    (setq L1 (vl-remove nil (mapcar '(lambda(x)
(if (equal (car (dxf 11 x)) (car (dxf 11 (car L))) 1) x nil)) L))
 L1 (vl-sort L1 '(lambda(x y) (> (cadr (dxf 11 x)) (cadr (dxf 11 y)))))
 L (vl-remove nil (mapcar '(lambda(x)(if (member x L1) nil x )) L))
 n -1)    
    (while (< n (1- (length L1)))
      (write-line (strcat (layText) "\t"  (layText) "\t" (layText) "\t" (layText)) file))
  )
  (close file)
)
 


  • 0

#5 Tuynh

Tuynh

    biết vẽ arc

  • Members
  • PipPip
  • 46 Bài viết
Điểm đánh giá: 1 (bình thường)

Đã gửi 09 April 2014 - 09:20 PM

Tuyệt vời bạn ạ, Lisp này sẽ giúp mình làm nhanh hơn không phải lách cách nhập số liệu.

Bạn có thể mở rộng là lisp thêm hoặc bớt đối tượng chọn được không ví dụ: trên là Sbùn:, Sđào:, Sđắp đường, S đắp bờ kênh; bây giờ mình muốn thêm S trồng cỏ:..... hay bớt đi Sbùn: Ý mình là diện tích có bao nhiêu hàng thì lisp quét chọn hết và đưa ra dạng text như bạn đã viết

Chúc bạn sức khỏe và thành công trong cuộc sống.


  • 0

#6 Tot77

Tot77

    biết lệnh adcenter

  • Members
  • PipPipPipPipPipPipPip
  • 990 Bài viết
Điểm đánh giá: 498 (tốt)

Đã gửi 10 April 2014 - 11:00 AM

Vậy dùng cái này, nhưng phải thống nhất 1 kiểu S, vì lisp sẽ xem "S bùn:" khác với "Sbùn:" hay "S bùn  :" 

(defun c:test(/ file L L0 L1 st st1 n os)
  (defun dxf(id v) (cdr (assoc id (entget v))))
  (defun layText(L / as) (if (setq as (assoc (nth (setq n (1+ n)) st) L)) (cadr as) ""))
  (defun ssto(ss) (if ss (vl-remove-if 'listp (mapcar 'cadr (ssnamex ss))) nil))
  (defun battext(vt / ss) (if (setq ss (ssget "C" vt (polar vt 0 -5) '((0 . "TEXT") (1 . "S*")))) (dxf 1 (ssname ss 0)) nil))
  (defun leftList(L n) (reverse (member (nth (1- n) L) (reverse L))))
  (defun rightList(L n) (member (nth n L) L))
  (defun tach(L / n n1) (setq n -1)
    (repeat (1- (length L))
      (if (not (equal (dxf 11 (nth (setq n (1+ n)) L)) (dxf 11 (nth (1+ n) L)) 10)) (setq n1 (1+ n))))
    (setq L0 (append L0 (list (leftList L n1))) L0 (append L0 (list (rightList L n1)))))
 
  ;;;  
  (setq file (open (strcat (getvar "dwgprefix") "Dao dap.txt") "a")
L (vl-sort (ssto (ssget '((0 . "*TEXT")(8 . "DIENDIENTICH") (1 . "~*[~-0--9]*"))))
  '(lambda(x y) (< (car (dxf 11 x)) (car (dxf 11 y)))))
L0 nil
st nil
os (getvar "osmode"))
  (setvar "osmode" 0)
  (while L
    (setq L1 (vl-remove nil (mapcar '(lambda(x)
(if (equal (car (dxf 11 x)) (car (dxf 11 (car L))) 1) x nil)) L))
 L1 (vl-sort L1 '(lambda(x y) (> (cadr (dxf 11 x)) (cadr (dxf 11 y)))))
 L (vl-remove nil (mapcar '(lambda(x)(if (member x L1) nil x )) L)))
    (tach L1))
  
   (setq L0 (mapcar '(lambda(Lv)
              (mapcar '(lambda(x) (if (and (setq bt (battext (dxf 11 x))) (not (member bt st)))
  (setq st (append st (list bt))))
(list bt (dxf 1 x))) Lv)) L0)
n -1 st1 "")
  
  (write-line (repeat (length st) (setq st1 (strcat st1 (nth (setq n (1+ n)) st) "\t"))) file)
  (foreach Lv L0
    (setq n -1 st1 "")
    (repeat (length st) (setq st1 (strcat st1 (laytext Lv) "\t")))
    (write-line st1 file))
  
  (setvar "osmode" os)
  (close file)
)
 


  • 0

#7 Tuynh

Tuynh

    biết vẽ arc

  • Members
  • PipPip
  • 46 Bài viết
Điểm đánh giá: 1 (bình thường)

Đã gửi 10 April 2014 - 12:14 PM

OK bạn ạ. Cám ơn bạn nhiều nhé!


  • 0

#8 Tuynh

Tuynh

    biết vẽ arc

  • Members
  • PipPip
  • 46 Bài viết
Điểm đánh giá: 1 (bình thường)

Đã gửi 20 May 2015 - 10:40 AM

http://www.mediafire...n2x88g8f/T1.dwg

Bác giúp em hoàn thiện lisp này được không ạ. Trước em đưa ra bài toán là có bốn diện tích

Sbùn:

Sđào:

Sđắp đường:

Sđắp  BK:

Bây giờ số lượng diện tích tăng lên lúc thì bốn diện tích lúc thì 5.... lúc thì 12

S1:

S2:

S3:

S4:

S5:

S6:

.......

Bác giúp em sửa lisp để lấy xuất diện tích sang file excell hay dạng text như lisp test trên được không ạ.


  • 0

#9 huunhantvxdts

huunhantvxdts

    biết dimbaseline

  • Members
  • PipPipPipPipPip
  • 366 Bài viết
Điểm đánh giá: 53 (tàm tạm)

Đã gửi 20 May 2015 - 11:57 AM

Như cái này thì phải

https://www.youtube....h?v=eI054HozhwQ


  • 0

#10 Tuynh

Tuynh

    biết vẽ arc

  • Members
  • PipPip
  • 46 Bài viết
Điểm đánh giá: 1 (bình thường)

Đã gửi 20 May 2015 - 03:48 PM

Đúng như thế, ý mình đại loại cũng như vậy. Nghĩa là sau khi pick diện tích trên trắc ngang thì mình muốn xuất text sang excell đển tiện sử lý khối lượng


  • 0