Đến nội dung


Hình ảnh
5 stars - based on 24598 reviews
- - - - -

[Yêu cầu] Lisp lấy giá trị của dimenson, text và xuất ra file text


  • Please log in to reply
46 replies to this topic

#41 linhtu90protb

linhtu90protb

    Chưa sử dụng CAD

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

Đã gửi 20 June 2016 - 09:07 AM

Đây bạn:



(defun C:HA( / lst fn fw index x y z txt)	;Doan Van Ha Cadviet.com

 (princ "\nChon cac Text/Mtext/Dimension can xuat ra file...")

 (setq lst (acet-ss-to-list (ssget '((0 . "*TEXT,DIMENSION"))))

       	fn (getfiled "Chon file de save" "" "csv" 1)

       	fw (open fn "w")

       	index 0 x 1 y 1 z 1)

 (repeat (length lst)

  (cond

   ((= (cdr (assoc 0 (entget (nth index lst)))) "TEXT") (setq txt (strcat (cdr (assoc 1 (entget (nth index lst)))) "," "text" (itoa x)) x (1+ x)))

   ((= (cdr (assoc 0 (entget (nth index lst)))) "MTEXT") (setq txt (strcat (cdr (assoc 1 (entget (nth index lst)))) "," "mtext" (itoa y)) y (1+ y)))

   ((= (cdr (assoc 0 (entget (nth index lst)))) "DIMENSION")

	(if (= (cdr (assoc 1 (entget (nth index lst)))) "")

 	(setq txt (strcat (rtos (cdr (assoc 42 (entget (nth index lst))))) "," "dim" (itoa z)) z (1+ z))

 	(setq txt (strcat (cdr (assoc 1 (entget (nth index lst)))) "," "dim" (itoa z)) z (1+ z)))))

  (princ (strcat txt "\n") fw)

  (setq index (1+ index)))

 (close fw))


Sao e không dùng đc lisp này nhỉ. ko dùng đc lệnh HA


  • 0

#42 hoan3666

hoan3666

    biết pan

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

Đã gửi 09 November 2016 - 08:14 PM

chào mọi người cho em đào mộ tý, có ai sửa lips này thay vì xuất ra csv thì ghi vào clipbroad giúp em đc không

giống như lips này http://www.cadviet.c...lieu-kieu-text/

nhưng thay nhưng chọn được 1 vùng dữ liệu giống của bác hà

Bạn dùng cái này xem ưng bụng không?

(defun C:HA()	;Doan Van Ha Cadviet.com

 (princ "\nChon cac Text/Mtext/Dimension can xuat ra file...")

 (setq lst (acet-ss-to-list (ssget '((0 . "*TEXT,DIMENSION"))))

       	fn (getfiled "Chon file de save" "" "csv" 1)

       	fw (open fn "w"))

 (foreach n lst

  (cond

   ((= (cdr (assoc 0 (entget n))) "TEXT") (setq txt (cdr (assoc 1 (entget n)))))

   ((= (cdr (assoc 0 (entget n))) "MTEXT") (setq txt (cdr (assoc 1 (entget n)))))

   ((= (cdr (assoc 0 (entget n))) "DIMENSION")

	(if (= (cdr (assoc 1 (entget n))) "")

 	(setq txt (rtos (cdr (assoc 42 (entget n)))))

 	(setq txt (cdr (assoc 1 (entget n)))))))

  (princ (strcat txt "\n") fw))

 (close fw))

xi

  • 0

#43 Bee

Bee

    biết dimbaseline

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

Đã gửi 09 November 2016 - 09:14 PM

chào mọi người cho em đào mộ tý, có ai sửa lips này thay vì xuất ra csv thì ghi vào clipbroad giúp em đc không

giống như lips này http://www.cadviet.c...lieu-kieu-text/

nhưng thay nhưng chọn được 1 vùng dữ liệu giống của bác hà

Ghi vào xong xuất sang đâu vậy ? Ghi chung chung thế này thì mở béng nó file cvs xong copy data vào clipboard là xong :D


  • 0

#44 hoan3666

hoan3666

    biết pan

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

Đã gửi 09 November 2016 - 09:19 PM

Ghi vào xong xuất sang đâu vậy ? Ghi chung chung thế này thì mở béng nó file cvs xong copy data vào clipboard là xong :D

mình muốn xuất ra excel nhưng mỗi lần coppy nó chỉ được 1 cột
 nên mình phải coppy nhiều lần. Nhưng mình coppy nhiều lần mà dùng lips bác Hà thì mỗi lần nó lại tạo thêm 1 file nên mình muốn lips đơn giản chỉ ghi vào rồi mình tự paste ra excel

cám ơn bác trả lời mình nha


  • 0

#45 Bee

Bee

    biết dimbaseline

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

Đã gửi 09 November 2016 - 10:15 PM

mình muốn xuất ra excel nhưng mỗi lần coppy nó chỉ được 1 cột
 nên mình phải coppy nhiều lần. Nhưng mình coppy nhiều lần mà dùng lips bác Hà thì mỗi lần nó lại tạo thêm 1 file nên mình muốn lips đơn giản chỉ ghi vào rồi mình tự paste ra excel

cám ơn bác trả lời mình nha

Xem phim hợp đồng hôn nhân xong thấy hài hài, code cho bạn nhé.

 

Đã chỉnh sửa chút xíu. CAD thế nào nó copy y nguyên, sang excel phải format cho đúng font nhé. ^_^

(defun C:HA1 (/ lst str txt 2ClipB)

  (vl-load-com)

  (princ "\nChon cac Text/Mtext/Dimension can copy..."
  )

  (setq lst (acet-ss-to-list (ssget '((0 . "*TEXT,DIMENSION")))))

  (setq str "")

  (foreach n lst

    (cond

      ((= (cdr (assoc 0 (entget n))) "TEXT")
       (setq txt (cdr (assoc 1 (entget n))))
      )

      ((= (cdr (assoc 0 (entget n))) "MTEXT")
       (setq txt (cdr (assoc 1 (entget n))))
      )

      ((= (cdr (assoc 0 (entget n))) "DIMENSION")

       (if (= (cdr (assoc 1 (entget n))) "")

	 (setq txt (rtos (cdr (assoc 42 (entget n)))))

	 (setq txt (cdr (assoc 1 (entget n))))
       )
      )
    )

    (setq str (strcat str txt "\n"))
  )
  
  (vlax-invoke
    (vlax-get
      (vlax-get	(setq 2ClipB (vlax-create-object "htmlfile"))
		'ParentWindow
      )
      'ClipBoardData
    )
    'SetData
    "Text"
    str
  )
  (vlax-release-object 2ClipB)
)


  • 2

#46 Black Roses

Black Roses

    biết zoom

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

Đã gửi 18 May 2017 - 03:28 AM

Chào mọi người, em có đang tìm lisp thực hiện chức năng cũng giống giống thế này, trước đây đã dùng rồi mà giờ không thể tìm lại được nữa. Đó là em mở file cad lên, rồi mở 1 file excel lên, sau đó chọn 1 text (hoặc Mtext) thì nó sẽ tự động lấy giá trị đó dán qua bên file excel, tương tự như thế này ạ

 

http://www.autocadpr...ocad-to_20.html

 

Em có tải cái đó về, nhưng không dùng được ạ :(, em đang dùng cad 2007, nó bảo lỗi NIL gì gì đó, em không biết sửa.

 

Mong được sự giúp đỡ, chân thành cảm ơn :)


  • 0

#47 xdman

xdman

    biết pan

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

Đã gửi 18 July 2017 - 11:21 AM

 

Xem phim hợp đồng hôn nhân xong thấy hài hài, code cho bạn nhé.

 

Đã chỉnh sửa chút xíu. CAD thế nào nó copy y nguyên, sang excel phải format cho đúng font nhé. ^_^

(defun C:HA1 (/ lst str txt 2ClipB)

  (vl-load-com)

  (princ "\nChon cac Text/Mtext/Dimension can copy..."
  )

  (setq lst (acet-ss-to-list (ssget '((0 . "*TEXT,DIMENSION")))))

  (setq str "")

  (foreach n lst

    (cond

      ((= (cdr (assoc 0 (entget n))) "TEXT")
       (setq txt (cdr (assoc 1 (entget n))))
      )

      ((= (cdr (assoc 0 (entget n))) "MTEXT")
       (setq txt (cdr (assoc 1 (entget n))))
      )

      ((= (cdr (assoc 0 (entget n))) "DIMENSION")

       (if (= (cdr (assoc 1 (entget n))) "")

	 (setq txt (rtos (cdr (assoc 42 (entget n)))))

	 (setq txt (cdr (assoc 1 (entget n))))
       )
      )
    )

    (setq str (strcat str txt "\n"))
  )
  
  (vlax-invoke
    (vlax-get
      (vlax-get	(setq 2ClipB (vlax-create-object "htmlfile"))
		'ParentWindow
      )
      'ClipBoardData
    )
    'SetData
    "Text"
    str
  )
  (vlax-release-object 2ClipB)
)

Lisp của bạn hay quá, nhưng mình có mong muốn cao hơn chút nữa, mong bạn giúp cho, vẫn dựa vào lisp trên, cụ thể như này:

- sau khi paste vào excel thì không còn ô trống cuối cùng nữa. cụ thể khi chọn n giá trị trong cad thì copy vào excel chỉ có n dòng thôi, theo mình hiểu trong lisp trên, ký tự "\n" được gán vào đến tận giá trị cuối cùng, làm sao giá trị cuối cùng ko còn bị Enter xuống dòng nữa thì tuyệt.

- các con số sau khi copy của dimension hay bị lẻ, làm sao làm tròn các con số này không còn số sau dấu phẩy nữa.

Vì mình làm bóc khối lượng trên excel nên lisp của bạn được cải biên thêm theo 2 ý kiến trên đây thì tiện lợi cho những bạn làm bóc tách khối lượng như mình rất nhiều.

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


  • 0