Đến nội dung


Hình ảnh
- - - - -

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


  • Please log in to reply
18 replies to this topic

#1 huunhantvxdts

huunhantvxdts

    biết dimbaseline

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

Đã gửi 24 October 2012 - 10:39 AM

Đâ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
  • 0

#2 huunhantvxdts

huunhantvxdts

    biết dimbaseline

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

Đã gửi 25 October 2012 - 02:46 PM

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.c..._trac_ngang.dwg
  • 0

#3 phamthanhbinh

phamthanhbinh

    biết lệnh adcenter

  • Moderator
  • PipPipPipPipPipPipPip
  • 6009 Bài viết
Điểm đánh giá: 3113 (tuyệt vời)

Đã gửi 25 October 2012 - 04:26 PM

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.c..._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.
  • 0
Chúc các quý Anh trên diễn đàn luôn khỏe, đẻ thêm được nhiều thứ để mót.

#4 huunhantvxdts

huunhantvxdts

    biết dimbaseline

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

Đã gửi 26 October 2012 - 08:45 AM

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

#5 ketxu

ketxu

    Copier - Paster - Editor

  • Moderator
  • PipPipPipPipPipPipPip
  • 5685 Bài viết
Điểm đánh giá: 2606 (tuyệt vời)

Đã gửi 26 October 2012 - 08:53 AM

Đ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 :)
  • 0

Thành viên nhóm CadMagic.
Mời bạn ghé thăm facebook nhóm - Page viết lisp theo yêu cầu  :
CAD MAGIC


#6 huunhantvxdts

huunhantvxdts

    biết dimbaseline

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

Đã gửi 26 October 2012 - 09:00 AM

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
  • 0

#7 ketxu

ketxu

    Copier - Paster - Editor

  • Moderator
  • PipPipPipPipPipPipPip
  • 5685 Bài viết
Điểm đánh giá: 2606 (tuyệt vời)

Đã gửi 26 October 2012 - 09:07 AM

Rất tiếc là hiện tại mình chưa viết được :)
  • 0

Thành viên nhóm CadMagic.
Mời bạn ghé thăm facebook nhóm - Page viết lisp theo yêu cầu  :
CAD MAGIC


#8 huunhantvxdts

huunhantvxdts

    biết dimbaseline

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

Đã gửi 26 October 2012 - 09:28 AM

không sao cả khi nào rãnh bạn có thể viết cũng được, rất mong bạn giúp đỡ
  • 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 29 October 2012 - 10:04 AM

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Á
  • 0

#10 huunhantvxdts

huunhantvxdts

    biết dimbaseline

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

Đã gửi 31 October 2012 - 09:52 AM

Sao không có ai giúp tôi vậy? mò hoài mà không được
  • 0

#11 NguyenNgocSon

NguyenNgocSon

    biết dimbaseline

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

Đã gửi 07 November 2012 - 05:11 PM

Bạn hãy mô tả kỹ cái File excel mà bạn cần lấy từ Excel ra ?
Có thể tôi giúp được !
  • 0

#12 huunhantvxdts

huunhantvxdts

    biết dimbaseline

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

Đã gửi 08 November 2012 - 07:35 AM

ok đây là file excell tôi cần cám ơn bạn trước nhé
http://www.cadviet.c...960_yeu_cau.rar
  • 0

#13 NguyenNgocSon

NguyenNgocSon

    biết dimbaseline

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

Đã gửi 08 November 2012 - 11:17 AM

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 !
  • 0

#14 huunhantvxdts

huunhantvxdts

    biết dimbaseline

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

Đã gửi 08 November 2012 - 02:01 PM

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
  • 0

#15 NguyenNgocSon

NguyenNgocSon

    biết dimbaseline

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

Đã gửi 08 November 2012 - 04:24 PM

Chào bạn. Mình cũng không dùng lisp cho bài toán của bạn
Mình dùng VBA ~
  • 0

#16 hochoaivandot

hochoaivandot

    biết dimradius

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

Đã gửi 09 November 2012 - 08:16 AM

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ẻ...
  • 0

Dương Bá Diệp

 

www.cadonline.duyxuyen.vn 

 

Thành viên nhóm CADMAGIC

 


#17 huunhantvxdts

huunhantvxdts

    biết dimbaseline

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

Đã gửi 09 November 2012 - 11:17 AM

Chào bạn. Mình cũng không dùng lisp cho bài toán của bạn
Mình dùng VBA ~

Cũng được miễn sao cho ra được bản excell
  • 0

#18 huunhantvxdts

huunhantvxdts

    biết dimbaseline

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

Đã gửi 09 November 2012 - 11:18 AM

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
  • 0

#19 SONMK2008

SONMK2008

    biết zoom

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

Đã gửi 10 November 2012 - 09:08 PM

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!
  • 0