Đến nội dung


Hình ảnh

Nhờ viết lisp lọc các đối tượng là text trong một vùng kín xuất ra Excel


  • Please log in to reply
13 replies to this topic

#1 ngoclop

ngoclop

    biết pan

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

Đã gửi 28 March 2013 - 10:53 AM

Nhờ các bác viết hộ em lisp lọc các đối tượng là text trong một vùng kín (pline kín) sau đó xuất ra excel. Em cảm ơn các bác.


  • 0

#2 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 28 March 2013 - 02:36 PM

Nhờ các bác viết hộ em lisp lọc các đối tượng là text trong một vùng kín (pline kín) sau đó xuất ra excel. Em cảm ơn các bác.

Hề hề hề,

Vùng kín ấy có nhiều rận lắm, lôi nó ra excel theo kiểu gì??? Bạn hãy gửi một bản vẽ mẫu và file excel mẫu lên nhé.


  • 2
Chúc các quý Anh trên diễn đàn luôn khỏe, đẻ thêm được nhiều thứ để mót.

#3 ngoclop

ngoclop

    biết pan

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

Đã gửi 28 March 2013 - 02:37 PM

Đây là bản vẽ của em mong mọi người giúp đỡ, em cảm ơn mọi người rẩt nhiềuhttp://www.cadviet.c...0_new_block.dwg


  • 0

#4 ngoclop

ngoclop

    biết pan

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

Đã gửi 28 March 2013 - 02:38 PM

Lôi các text đó ra thành một cột trong excel thôi bác Bình ah, em cảm ơn bác


  • 0

#5 KangKung

KangKung

    biết lệnh array

  • Members
  • PipPipPip
  • 189 Bài viết
Điểm đánh giá: 227 (khá)

Đã gửi 28 March 2013 - 02:51 PM

Nhờ các bác viết hộ em lisp lọc các đối tượng là text trong một vùng kín (pline kín) sau đó xuất ra excel. Em cảm ơn các bác.

Lisp của bạn đây. Vùng kín hay hở đều chơi hết.File xuất ra gồm có STT X Y và nội dung Text

;========LISP OUTPUT TEXT BEN TRONG PLINE==========
;=============KANGKUNG 28/03/2013==================
(defun C:KK()
  (setq plst (acet-geom-vertex-list (car (entsel "\n Select pline:\n"))))
  (setq plst1 (vl-sort plst '(lambda (e1 e2) (if (/= (car e1) (car e2)) (< (car e1) (car e2)) (< (cadr e1) (cadr e2))))))
  (setq X_min(car (nth 0 plst1))
	X_max(car (last plst1)))
  (setq plst2 (vl-sort plst '(lambda (e1 e2) (if (/= (cadr e1) (cadr e2)) (< (cadr e1) (cadr e2)) (< (car e1) (car e2))))))
  (setq Y_min(cadr (nth 0 plst2))
	Y_max(cadr (last plst2)))
  (command "ZOOM" (list X_min Y_min) (list X_max Y_max))
  (setq taphop (ssget  "CP" plst '((0 . "TEXT"))))
  (if (not Path) (setq Path(getvar "dwgprefix")))
  (setq file(getfiled "Output File" Path "csv" 11) Path file)
  (setq file_out(open file "W"))
  (setq index 0)
  (while (< index (sslength taphop))
    (setq TEXT (entget (ssname taphop index)))
    (if (= (+ (cdr(assoc 72 TEXT)) (cdr(assoc 73 TEXT))) 0)
      (setq InsertPoint(cdr(assoc 10 TEXT)))
      (setq InsertPoint(cdr(assoc 11 TEXT))))
    (setq String(cdr(assoc 1 TEXT)))
    (write-line (strcat (rtos (+ index 1) 2 0) "," (rtos (car InsertPoint) 2 3) "," (rtos (cadr InsertPoint) 2 3) "," String) file_out)
    (setq index (+ index 1))
    )
  (close file_out)
  (alert "Well done!")
  )
(princ "\n         Written By KangKung - 28/03/2013\n")
(princ "\n           Nhap KK de chay chuong trinh\n")

  • 3

#6 ngoclop

ngoclop

    biết pan

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

Đã gửi 28 March 2013 - 03:04 PM

Cảm ơn 2 bác, lisp đúng với mong muốn của em rồi ah


  • 0

#7 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 28 March 2013 - 03:48 PM

Lôi các text đó ra thành một cột trong excel thôi bác Bình ah, em cảm ơn bác

Hề hề hề,

Ôi chao, nhiều rận quá.

Cột thì dễ rồi, nhưng trật tự xếp trong cột mới là vấn đề.cái lisp của bác KangKung sẽ cho trật tự là thứ tự các text được hình thành trong bộ chọn text.và sẽ chọn cả các text nằm trên biên vùng chọn. Còn nó có đúng hay không thì chỉ có bạn biết mà thôi.


  • 0
Chúc các quý Anh trên diễn đàn luôn khỏe, đẻ thêm được nhiều thứ để mót.

#8 tientracdia

tientracdia

    biết lệnh scale

  • Members
  • PipPipPip
  • 147 Bài viết
Điểm đánh giá: -11 (hơi kém)

Đã gửi 29 March 2013 - 06:14 PM

Lisp của bạn đây. Vùng kín hay hở đều chơi hết.File xuất ra gồm có STT X Y và nội dung Text

;========LISP OUTPUT TEXT BEN TRONG PLINE==========
;=============KANGKUNG 28/03/2013==================
(defun C:KK()
  (setq plst (acet-geom-vertex-list (car (entsel "\n Select pline:\n"))))
  (setq plst1 (vl-sort plst '(lambda (e1 e2) (if (/= (car e1) (car e2)) (< (car e1) (car e2)) (< (cadr e1) (cadr e2))))))
  (setq X_min(car (nth 0 plst1))
	X_max(car (last plst1)))
  (setq plst2 (vl-sort plst '(lambda (e1 e2) (if (/= (cadr e1) (cadr e2)) (< (cadr e1) (cadr e2)) (< (car e1) (car e2))))))
  (setq Y_min(cadr (nth 0 plst2))
	Y_max(cadr (last plst2)))
  (command "ZOOM" (list X_min Y_min) (list X_max Y_max))
  (setq taphop (ssget  "CP" plst '((0 . "TEXT"))))
  (if (not Path) (setq Path(getvar "dwgprefix")))
  (setq file(getfiled "Output File" Path "csv" 11) Path file)
  (setq file_out(open file "W"))
  (setq index 0)
  (while (< index (sslength taphop))
    (setq TEXT (entget (ssname taphop index)))
    (if (= (+ (cdr(assoc 72 TEXT)) (cdr(assoc 73 TEXT))) 0)
      (setq InsertPoint(cdr(assoc 10 TEXT)))
      (setq InsertPoint(cdr(assoc 11 TEXT))))
    (setq String(cdr(assoc 1 TEXT)))
    (write-line (strcat (rtos (+ index 1) 2 0) "," (rtos (car InsertPoint) 2 3) "," (rtos (cadr InsertPoint) 2 3) "," String) file_out)
    (setq index (+ index 1))
    )
  (close file_out)
  (alert "Well done!")
  )
(princ "\n         Written By KangKung - 28/03/2013\n")
(princ "\n           Nhap KK de chay chuong trinh\n")

Cám ơn bạn KangKung về Lisp trên,

Mính có một file tọa độ điểm gồm : lớp điểm ( dạng point )  là tọa độ x,y ; lớp Số thứ tụ điểm, lớp cao độ , lớp code dạng ghi chú về điểm đó ( dạng text),

Xin  nhờ Bạn giúp mình Lisp xuất :  điểm point , text ra excel theo từng điểm theo hàng như sau : Số thứ tụ điểm đó - tọa độ X - tọa độ Y - Ghi chú. ( X,Y theo điểm point ).

File gởi kèm

http://www.cadviet.c...at_ra_excel.dwg

Cám ơn


  • 0

#9 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 31 March 2013 - 11:32 AM

Cám ơn bạn KangKung về Lisp trên,

Mính có một file tọa độ điểm gồm : lớp điểm ( dạng point )  là tọa độ x,y ; lớp Số thứ tụ điểm, lớp cao độ , lớp code dạng ghi chú về điểm đó ( dạng text),

Xin  nhờ Bạn giúp mình Lisp xuất :  điểm point , text ra excel theo từng điểm theo hàng như sau : Số thứ tụ điểm đó - tọa độ X - tọa độ Y - Ghi chú. ( X,Y theo điểm point ).

File gởi kèm

http://www.cadviet.c...at_ra_excel.dwg

Cám ơn

Hề hề hề,

Mình đã xem bản vẽ của bạn và có một vài ý kiến như sau:

1/- Một cụm point của bạn gồm có 4 đối tượng là; 1 text trên lớp "Dh_Caodo", 1 point trên lớp "Dh_Point", 1 text trên lớp "Dh_stt" và 1 text trên lớp "Dh_Code". Vì sao bạn không nhóm cả 4 đối tượng này vào một block thuộc tính để dễ dàng truy xuất nó mà để rời rạc như vậy. Điều này gây khó khăn cho việc chọn đối tượng cần truy xuất do khá nhiều điểm của bạn nằm liền kề nhau và có chung các thuộc tính chọn lựa.

2/- Với 4 đối tượng trong nhóm nhưng bạn chỉ cần truy xuất hai đối tượng là text trên lớp "Dh_stt" và point tên lớp "Dh_Point" thôi ư?? Các đối tượng khác có cần quan tâm không?? Nếu có thì nhét chúng vào đâu???

3/- Việc viết lisp này tuy không quá khó, nhưng trên diễn đàn cũng có khá nhiều lisp tương tự với yêu cầu của bạn rồi, sao bạn không thử tìm kiếm và lấy về dùng thử. Nếu có lisp nào bạn thấy gần phù hợp nhất với yêu cầu của bạn thì post lên để mọi người chỉnh giúp chỉnh sửa cho phù hợp, như vậy sẽ nhanh hơn nhiều là việc làm mới bạn ạ. Bạn cũng nên thông cảm với các lisper trên diễn đàn vì thời gian và sự kiên nhẫn hạn chế bạn ạ.

Hề hề hề,...

Và đây là lisp theo yêu cầu của bạn:

 

(defun c:xpt ( / oldos fn f ssc p1 p2 txt )
(vl-load-com)
(setq oldos (getvar "osmode"))
(setvar "osmode" 0)
(command "undo" "be")
(setq  fn (getfiled "Select Data File" "" "csv" 0)
          f (open fn "w")
          ssc (acet-ss-to-list (ssget "w" (setq p1 (getpoint "\n Chon diem goc tren ben trai vung chon"))
                                                             (setq p2 (getpoint p1 "\n Chon diem goc duoi ben phai vung chon"))
                                                             (list (cons 0 "point") (cons 8 "Dh_Point")))) 
          txt "" )
(foreach po ssc
        (setq txt (strcat (cdr (assoc 1 (entget (car (acet-ss-to-list (ssget "w" p1 p2
                                        (list (cons 0 "text") (cons 11 (cdr (assoc 10 (entget po)))) (cons 8 "Dh_stt")))))))) 
                                  (chr 44) (rtos (cadr (assoc 10 (entget po))) 2 2) 
                                  (chr 44) (rtos (caddr (assoc 10 (entget po))) 2 2)))
        (write-line txt f)
)
(close f)
(command "undo" "e")
(setvar "osmode" oldos)
(princ)
)
 
Chúc bạn vui
 
Khuyến mãi cho bạn một lisp khác đơn giản hơn với cách dùng như cụ:

(defun c:xpt1 ( / oldos fn f ssc p1 p2 txt )
(vl-load-com)
(setq oldos (getvar "osmode"))
(setvar "osmode" 0)
(command "undo" "be")
(setq  fn (getfiled "Select Data File" "" "csv" 0)
          f (open fn "w")
          ssc (acet-ss-to-list (ssget "w" (setq p1 (getpoint "\n Chon diem goc tren ben trai vung chon"))
                                                             (setq p2 (getpoint p1 "\n Chon diem goc duoi ben phai vung chon"))
                                                             (list (cons 0 "text") (cons 8 "Dh_stt")))) 
          txt "" )
(write-line  "STT diem , Toa do X , Toa do Y , Ghi chu" f)
(foreach tex ssc
      (setq txt (strcat (cdr (assoc 1 (entget tex))) (chr 44) (rtos (cadr (assoc 11 (entget tex))) 2 2) 
                                 (chr 44) (rtos (caddr (assoc 11 (entget tex))) 2 2)) )
      (write-line txt f)
)
(close f)
(command "undo" "e")
(setvar "osmode" oldos)
(princ)
)
 

Bài viết đã được chỉnh sửa nội dung bởi phamthanhbinh: 31 March 2013 - 08:49 PM
Bổ sung lisp, sửa lỗi

  • 0
Chúc các quý Anh trên diễn đàn luôn khỏe, đẻ thêm được nhiều thứ để mót.

#10 tientracdia

tientracdia

    biết lệnh scale

  • Members
  • PipPipPip
  • 147 Bài viết
Điểm đánh giá: -11 (hơi kém)

Đã gửi 31 March 2013 - 07:24 PM

Lisp không xuất ra file txt hay cvs được Bạn ơi.

Mong bạn giúp


  • 0

#11 KangKung

KangKung

    biết lệnh array

  • Members
  • PipPipPip
  • 189 Bài viết
Điểm đánh giá: 227 (khá)

Đã gửi 31 March 2013 - 08:45 PM

Lisp không xuất ra file txt hay cvs được Bạn ơi.

Mong bạn giúp

Lỗi ở đây (setvar "osmde" 0). Sửa osmde thành osmode


  • 1

#12 tientracdia

tientracdia

    biết lệnh scale

  • Members
  • PipPipPip
  • 147 Bài viết
Điểm đánh giá: -11 (hơi kém)

Đã gửi 31 March 2013 - 09:12 PM

Mình không hiểu, lisp yêu cầu chọn file csv  ???

Ý mình muốn chọn trong đa giác hay các điểm  rối xuất ra file thôi


  • 0

#13 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 01 April 2013 - 12:12 PM

Mình không hiểu, lisp yêu cầu chọn file csv  ???

Ý mình muốn chọn trong đa giác hay các điểm  rối xuất ra file thôi

Hề hề hề,

Lisp yêu cầu chọn file csv để bạn lưu dữ liệu xuất ra vào đó. Sau khi chọn file csv bạn sẽ phải chọn vùng chứa các điểm cần xuất theo phương pháp chọn bằng window. Nếu bạn muốn chọn vào polyline có sẵn thì phải thay đổi code. bạn hãy tham khảo lisp nói trên và tự sửa nhé. Nó không quá khó. Dơn giản chỉ là thay phương pháp chọn bằng window (w) thành phương pháp chọn bằng window polyline (wp). Tất nhiên lúc này bạn phải có code để xác định tọa độ các đỉnh của polyline. Trên diễn đàn đã có khá nhiều code về cách chọn này, bạn chịu khó tìm hiểu nhé. Mình lười rồi.


  • 1
Chúc các quý Anh trên diễn đàn luôn khỏe, đẻ thêm được nhiều thứ để mót.

#14 hoanghiiep

hoanghiiep

    Chưa sử dụng CAD

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

Đã gửi 16 February 2014 - 08:14 AM

 các mem cho mình hỏi sao vùng viết text vừa to vừa đục? khắc phục ntn đây? 


  • 0