Chuyển đến nội dung
Diễn đàn CADViet
Đăng nhập để thực hiện theo  
Tuynh

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

Các bài được khuyến nghị

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.com/download/t565ylzp5slo1lp/Text+Cad.dwg

http://www.mediafire.com/download/aeiy13k23za1mim/Khoi+luong.xls

Chia sẻ bài đăng này


Liên kết tới bài đăng
Chia sẻ trên các trang web khác

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.

Chia sẻ bài đăng này


Liên kết tới bài đăng
Chia sẻ trên các trang web khác

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 

Chia sẻ bài đăng này


Liên kết tới bài đăng
Chia sẻ trên các trang web khác

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)
)
 

Chia sẻ bài đăng này


Liên kết tới bài đăng
Chia sẻ trên các trang web khác

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.

Chia sẻ bài đăng này


Liên kết tới bài đăng
Chia sẻ trên các trang web khác

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)
)
 

  • Vote tăng 1

Chia sẻ bài đăng này


Liên kết tới bài đăng
Chia sẻ trên các trang web khác

http://www.mediafire.com/download/32yhvb0n2x88g8f/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 ạ.

Chia sẻ bài đăng này


Liên kết tới bài đăng
Chia sẻ trên các trang web khác

Đú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

Chia sẻ bài đăng này


Liên kết tới bài đăng
Chia sẻ trên các trang web khác

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.

anh ơi sao khi appload lisp của anh thì máy báo lỗi : syntax error vậy anh. Anh sữa giùm e xí. Cảm ơn anh nhiều.

Chia sẻ bài đăng này


Liên kết tới bài đăng
Chia sẻ trên các trang web khác

anh ơi sao khi appload lisp của anh thì máy báo lỗi : syntax error vậy anh. Anh sữa giùm e xí. Cảm ơn anh nhiều.

Bạn copy và dán, download trực tiếp sẽ bị lỗi

Chia sẻ bài đăng này


Liên kết tới bài đăng
Chia sẻ trên các trang web khác

Bạn copy và dán, download trực tiếp sẽ bị lỗi

vẫn không được bạn ơi, bạn có thể kiểm tra lại codes giúp mình hk?

bạn có thể gửi qua mail: ngocthepham93@gmail.com .

cảm ơn bạn rất nhiều

Chia sẻ bài đăng này


Liên kết tới bài đăng
Chia sẻ trên các trang web khác

Tạo một tài khoản hoặc đăng nhập để nhận xét

Bạn cần phải là một thành viên để lại một bình luận

Tạo tài khoản

Đăng ký một tài khoản mới trong cộng đồng của chúng tôi. Điều đó dễ mà.

Đăng ký tài khoản mới

Đăng nhập

Bạn có sẵn sàng để tạo một tài khoản ? Đăng nhập tại đây.

Đăng nhập ngay
Đăng nhập để thực hiện theo  

×