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

[nhờ chỉnh sửa] lisp xuất TEXT từ Cad qua Excell

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

Đây là đoạn lisp mình tìm được ở diễn đàn mình thấy rất hay nhưng còn 1 vướng mắc nhỏ nhờ mọi người giúp đỡ, file yêu cầu theo link dưới.

Mình nói qua yêu cầu nhé: mình muốn tất cả text đã chọn được sắp xếp về 4 cột như file đi kèm

(defun c:c2e ( / hangdau)
(defun sosanh (e1 e2 / p1 p2)
(setq p1 (car e1)
p2 (car e2)
)
(if (equal (cadr p1) (cadr p2) fuzz)
(< (car p1) (car p2))
(> (cadr p1) (cadr p2))
)
)
(setq
ss (ssget '((0 . "TEXT")))
lst (ss2ent ss)
lst (mapcar '(lambda (e) (cons (cdr (assoc 10 (entget e))) (cdr (assoc 1 (entget e))))) lst)
caotext (cdr (assoc 40 (entget (ssname ss 0))))
fuzz (* caotext 1.0)
lst (vl-sort lst 'sosanh)
index 1
oldy nil
fn (getfiled "Chon file de save" "" "csv" 1)
fid (open fn "w")
)
(foreach e lst
(if (equal oldy (cadr (car e)) fuzz)
(progn
(princ "," fid)
(setq index (1+ index))
)
(progn
(if hangdau
(progn
(setq index 1)
(princ "\n" fid)
)
(setq hangdau t)
)
)
)
(princ (cdr e) fid)
(setq oldy (cadr (car e)))
)
(close fid)
)
(defun ss2ent (ss / sodt index lstent)
(setq
sodt (if ss
(sslength ss)
0
)
index 0
)
(repeat sodt
(setq ent (ssname ss index)
index (1+ index)
lstent (cons ent lstent)
)
)
(reverse lstent)
)

 

http://www.cadviet.c...ile_yeu_cau.rar

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

Sau 1 hồi mày mò đã làm được 1 phần nhỏ. Bây giờ muốn phát triển lên 1 mức cao hơn với nhiều trắc ngang được xếp hàng ngang.

Nhờ mọi người giúp đỡ, nếu ai có giải pháp nào có thể chỉ dùm, chứ mình nghĩ chưa ra giải pháp nào cả

Cám ơn mọi người quan tâm giúp đỡ

 

(defun c:c2e ( / hangdau)
	(defun sosanh (e1 e2 / p1 p2)
(setq p1 (car e1)
 p2 (car e2)
)
(if (equal (cadr p1) (cadr p2) fuzz)
 (< (car p1) (car p2))
 (> (cadr p1) (cadr p2))
)
)
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
(setq
ss (ssget '((0 . "TEXT")))
lst (ss2ent ss)
lst (mapcar '(lambda (e) (cons (cdr (assoc 10 (entget e))) (cdr (assoc 1 (entget e))))) lst)
caotext (cdr (assoc 40 (entget (ssname ss 0))))
fuzz (* caotext 1.0)
lst (vl-sort lst 'sosanh)
index 1
oldy nil
fn (getfiled "Chon file de save" "" "csv" 1)
fid (open fn "w")
)
;;;;;;;;;;;;;;;;;;;;;;;;
(foreach e lst
(if (equal oldy (cadr (car e)) fuzz)
 (progn
	(if (< index 4)
  (progn
   	(princ "," fid)
   	(setq index (1+ index))
  )
  	(progn
  	(setq index 1)
  	(princ "\n" fid)
  	)
 	)
 )
(progn
 (if hangdau
       	(progn
       	(setq index 1)
       	(princ "\n" fid)
       	)
  (setq hangdau t)
  )
)
)
(princ (cdr e) fid)
(setq oldy (cadr (car e)))
)
(close fid)
)
;;;;;;;;;;;;;;;;;;;;;;;;;;;
(defun ss2ent (ss / sodt index lstent)
(setq
sodt (if ss
(sslength ss)
0
)
index 0
)
(repeat sodt
(setq ent (ssname ss index)
index (1+ index)
lstent (cons ent lstent)
)
)
(reverse lstent)
)

file cần xuất

http://www.cadviet.com/upfiles/3/66960_kl_trac_ngang.dwg

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
Sau 1 hồi mày mò đã làm được 1 phần nhỏ. Bây giờ muốn phát triển lên 1 mức cao hơn với nhiều trắc ngang được xếp hàng ngang. Nhờ mọi người giúp đỡ, nếu ai có giải pháp nào có thể chỉ dùm, chứ mình nghĩ chưa ra giải pháp nào cả Cám ơn mọi người quan tâm giúp đỡ file cần xuất http://www.cadviet.com/upfiles/3/66960_kl_trac_ngang.dwg

Hề hề hề,

Chưa hiểu hết ý bạn hỏi.

Phải chăng bạn muốn liệt kê các text theo từng trắc ngang một chứ không phải theo trật tự đang có???

Nếu vậy, vấn đề của bạn là cần nhóm các text được chọn thành một list bao gồm các list nhỏ mà mỗi list nhỏ này sẽ chứa toàn bộ các text cần liệt kê trong một trắc ngang duy nhất.

Hiện tại với lisp bạn đã sửa thì việc chuyển các text trong một trắc ngang sang Excel đã hoàn thành.

Bạn hãy sử dụng lisp này là một hàm con và dùng nó với cái list các text mà mình đã nói ở trên là OK.

Để có được cái list các text theo ở trên, bạn hãy chia bản vẽ của bạn thành các ô lưới theo khung trắc ngang và tiến hành lấy text trong các khung này nhét vào các rọ riêng mà xử chúng là Ok.

Chúc bạn thành cô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

Hề hề hề,

Chưa hiểu hết ý bạn hỏi.

Phải chăng bạn muốn liệt kê các text theo từng trắc ngang một chứ không phải theo trật tự đang có???

Nếu vậy, vấn đề của bạn là cần nhóm các text được chọn thành một list bao gồm các list nhỏ mà mỗi list nhỏ này sẽ chứa toàn bộ các text cần liệt kê trong một trắc ngang duy nhất.

Đúng như vậy bạn à, khi đưa qua excell mình sẽ lọc được để tính khối lượng.

còn vấn đề tạo list và đưa vào list mình chưa làm bao giờ.

ở đây các lisp mình sử dụng là mình lấy của người ta mình chế lại thôi chứ có nhiều chỗ mình đâu biết. ví dụ đoạn lisp trên

nguyên đoạn này mình không biết, chỉ hiểu là lấy text ra rồi đưa vào biến lst

(defun sosanh (e1 e2 / p1 p2)

(setq p1 (car e1) p2 (car e2) )

(if (equal (cadr p1) (cadr p2) fuzz)

(< (car p1) (car p2))

(> (cadr p1) (cadr p2)) ) )

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

(setq ss (ssget '((0 . "TEXT")))

lst (ss2ent ss)

lst (mapcar '(lambda (e) (cons (cdr (assoc 10 (entget e))) (cdr (assoc 1 (entget e))))) lst)

caotext (cdr (assoc 40 (entget (ssname ss 0))))

fuzz (* caotext 1.0)

lst (vl-sort lst 'sosanh)

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

Đoạn trên là dùng để so sánh và sắp xếp lại thứ tự text trong tập chọn theo điểm đặt bạn ơ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

vậy theo như bạn Bình nói mình phải tạo 1 list chưa toàn bộ text trắc ngang. Vậy bạn có thể viết cho mình 1 lisp như vậy được không??

dựa vào đó mình sẽ phát triển lên, cám ơn bạn 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

Theo như Bác Bình chí giáo để làm được thật là khó (trình độ còn qua yếu, chỉ biết chế những cái đơn giản) sau mấy ngày vò đầu nhổ tóc ( chắc cũng mất mấy cọng) cũng không nên cơm nên cháo.

vấn đề này khó không sao không thấy ai chỉ giáo cả, Buồn QUÁ

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

Chào bạn! Mình đã xem qua nhưng mình chỉ có thể giúp bạn xuất như file yêu cầu trong trường hợp bạn pick chọn lần lượt các text khối lượng thô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

Lisp ở trên mình đã làm được nhưng các trắc ngang nằm theo cột, giờ mình muốn làm theo hàng. Bạn có thể đọc bài #3 của nguyenthanhbinh rồi làm giúp mình được không??? mình cũng đang nhưng chưa được do còn non yếu về lisp quá

cám ơn bạn

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

Yêu cầu của bạn lisp hoàn toàn làm được.

Nhưng phải đầu tư thời gian.

Mà đã đầu tư thời gian trong khi viết xong chỉ có mình bạn dùng (Công dụng của nó không phổ biến cho người dùng cad),

Cho nên mọi người không code cho bạn được.

Hoặc bạn chờ có ai biết lisp mà cũng gặp trường hợp cần dùng như bạn sẽ viết rồi chia sẻ...

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

Yêu cầu của bạn lisp hoàn toàn làm được.

Nhưng phải đầu tư thời gian.

Mà đã đầu tư thời gian trong khi viết xong chỉ có mình bạn dùng (Công dụng của nó không phổ biến cho người dùng cad),

Cho nên mọi người không code cho bạn được.

Hoặc bạn chờ có ai biết lisp mà cũng gặp trường hợp cần dùng như bạn sẽ viết rồi chia sẻ...

Cám ơn bạn để mình tự làm rồi ko hiểu đâu nhờ mọi người giúp đỡ cũng được

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 nào có thể sửa giúp lisp này để khi chọn đối tượng thì xuất sang excel theo 1 cột giống như lệnh cdtext của phần mềm thiết kế đường nova Không ? dùng lisp trên thì nếu chọn đối tượng dạng cột thì sang excel là dạng cột , còn nếu chọn đối tượng dạng hàng thì sang excel là dạng hàng . Nhưng mình mốn là chọn đối tượng dạng nào hoặc không theo thứ tự thì file xuất ra sang excel đều nằm trên 1 cột . Mình mong các bạn giúp đỡ ,mình chân thành cảm ơn các bạn!

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  

×