Chuyển đến nội dung
Diễn đàn CADViet
Kỹ sư

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

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

Bạn thử xem

(setq name (vl-filename-base (getvar "dwgname")))

(vla-put-textstring(vlax-ename->vla-object(ssname (ssget "X" '((0 . "TEXT") (10 813.5 15.0 0.0))) 0)) name)

 

hoặc (Nếu cái text kia là "E01" duy nhất trên bản vẽ)

 

(setq name (vl-filename-base (getvar "dwgname")))

(vla-put-textstring(vlax-ename->vla-object(ssname (ssget "X" '((0 . "TEXT") (1 . "E01"))) 0)) name)

 

Em làm các bản vẽ với 1 khung tên chuẩn, ví dụ như file đính kèm (Cty em chặn hết cổng usb nên k0 cop đc bản vẽ, phải tự chế 1 cái tương tự)

Và em muốn sửa các text trong các ô như tên bản vẽ, kí hiệu, ,,, bằng cách như bác đã chỉ thì cụ thể phải sửa như thế nào ạ?

http://www.cadviet.c.../3/dt1005_1.dwg

 

Cảm ơn bác 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

Hề hề hề,

Nếu muốn đổi cái nội dung text "E01" của bạn thành cái text "Ban ve cua ong" bạn hãy làm như sau:

(entmod (subst (cons 1 "Ban ve cua ong") (assoc 1 (setq els (entget (car (entsel "\n Chon text can thay"))))) els))

Hề hề hề,...

 

hề hề hề

Em cũng sẽ làm được nhiều thứ với đoạn code này của bác đấy

Cảm ơn bác lắm lắm!

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

 

Em làm các bản vẽ với 1 khung tên chuẩn, ví dụ như file đính kèm (Cty em chặn hết cổng usb nên k0 cop đc bản vẽ, phải tự chế 1 cái tương tự)

Và em muốn sửa các text trong các ô như tên bản vẽ, kí hiệu, ,,, bằng cách như bác đã chỉ thì cụ thể phải sửa như thế nào ạ?

http://www.cadviet.c.../3/dt1005_1.dwg

 

Cảm ơn bác nhiều!

 

Cái đối tượng cần thay ở đây là "DAM TANG 1", thay cái này bằng tên file phải không?

Vậy cái khung tên mẫu của bạn đối lượng này luôn luôn có nội dung là "DAM TANG 1"?

Khi chèn khung tên bạn có chèn ở 1 điểm gốc cố định không?

 

ở trường hợp 1: Nếu nội dung của khung mẫu luôn luôn là "DAM TANG 1" thì bạn dùng

 

(setq name (vl-filename-base (getvar "dwgname")))

(vla-put-textstring(vlax-ename->vla-object(ssname (ssget "X" '((0 . "TEXT") (1 . "DAM TANG 1"))) 0)) name)

 

ở trường hợp 2: Nếu cái khung tên này luôn được chèn ở 1 điểm cố định bạn dùng

 

(setq name (vl-filename-base (getvar "dwgname")))

(vla-put-textstring(vlax-ename->vla-object(ssname (ssget "X" '((0 . "TEXT") (11 370.0 6.5))) 0)) name)

 

Nếu cả 2 TH không xác định, bạn dùng cách thủ công là chọn nó như đã nói, hoặc sử dụng 1 đoạn code phức tạp hơn

 

Mà Sao bạn không tạo 1 bock khung tên có thuộc tính?

  • 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

@OP : Bạn hãy dùng Diesel :

- 1. Tạo mới trường tên file khi tạo khung tên :

Tạo 1 text bất kỳ, trong lúc Edit Text (hoặc khi dùng lệnh ddedit) nhấn Ctrl F để vào bảng chèn Field, ở mục Field Category chọn Other -> Chọn Diesel Expression , rồi copy dòng này vào :

$(substr,$(getvar,dwgname),1,$(-, $(strlen,$(getvar,dwgname)),4))

 

- 2 : Sửa từ text đã có bằng cách chọn tay text :

Dùng lệnh ddedit rồi thực hiện các bước tương tự hoặc sử dụng dòng này

(vla-put-textstring (vlax-ename->vla-object (car (entsel))) "%<\$(substr,$(getvar,dwgname),1,$(-, $(strlen,$(getvar,dwgname)),4))>%")

 

- 3 : Sửa từ Text có nội dung cố định "DAM TANG 1" trong bản vẽ :

(vla-put-textstring(vlax-ename->vla-object(ssname (ssget "X" '((0 . "TEXT") (1 . "DAM TANG 1"))) 0)) "%<\$(substr,$(getvar,dwgname),1,$(-, $(strlen,$(getvar,dwgname)),4))>%")

 

- 4 : Sửa từ Text có điểm chèn Center Midle cố định (370.0 6.5 0) :

(vla-put-textstring (vlax-ename->vla-object(ssname (ssget "X" (list (cons 0 "*TEXT")(cons 11 '(370.0 6.5 0.0) ))) 0)) "%<\$(substr,$(getvar,dwgname),1,$(-, $(strlen,$(getvar,dwgname)),4))>%")

 

Mấu chốt là dãy str Diesel bôi đậm trong bước 1. Bạn hoàn toàn có thể copy hoặc nhét nó vào trong 1 khung tên thuộc tính.

Tại sao nên dùng Diesel + Filed trong trường hợp này ? Bạn hãy save as file sang tên khác rồi Regen để biết lý do :)

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 các bác

Thực ra thì em không phải sửa mỗi cái tên bản vẽ trong khung tên, mà còn nhiều text nữa như trong bảng thống kê khối lượng như trong ảnh minh họa em post ở trang trước.

Và các text đó có vị trí xác định được bởi các bản vẽ của 1 loại cấu kiện là cùng form với nhau, và thường là được save as sang rồi thay đổi tên bản vẽ, kích thước, số lượng, ... là được

Và với số lượng bản vẽ lớn, nhưng các thao tác là lặp đi lặp lại nên em mới nhờ mọi người viết cho em cái lisp lấy số liệu từ text, dim xuất sang excel để thuận tiện cho việc tính toán, rồi từ các kết quả trong excel, chèn vào các đoạn code để rồi paste sang CAD, khỏi phải sửa tay

Đoạn code lấy tên file bản vẽ chỉ là 1 trường hợp muốn sửa thôi ạ

 

Giờ thì với đoạn code mà bác ngpham viết ở trường hợp 2, em đã test được rồi à. Để mai lên công ty thử làm với số lượng text lớn hơn xem thế nào

Cảm ơn các bác npham, DoanVanHa, ketxu, phamthanhbinh, Tue_NV đã nhiệt tình giúp đỡ

Chúc các bác sức khỏe và 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

À tiện đây, các bác cho em hỏi có cách nào để lisp xuất text, dim ra file csv ở trên xuất dữ liệu của các bản vẽ khác nhau ra cùng 1 file csv đượ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

À tiện đây, các bác cho em hỏi có cách nào để lisp xuất text, dim ra file csv ở trên xuất dữ liệu của các bản vẽ khác nhau ra cùng 1 file csv được không ạ?

Hề hề hề,

Có đấy bác ạ, nhưng có nhẽ phải làm kiểu củ chuối một chút.

Ấy là bác sử dụng lệnh open file csv với tham số a (append). Thế rồi sử dụng mỗi lần chạy lisp với một file CAD thì gán thêm dữ liệu vào file csv đã có . Thế là bác sẽ có 1 file csv lưu dữ liệu của nhiều file CAD.

Tuy nó chả được ngon mà lại lắm xơ song ít ra bác cũng xài tạm được trong lúc quẫn bách mà chửa có thứ ngon hơn để xài bác ạ.

Hề hề hề, mong bác chớ giận khi phải biếu bác cái của chả ngon này....

Hề hề hề.....

 

Bác có thể tham khảo cái lisp này rồi tự chế biến cho hợp khẩu vị của bác nhé:

http://www.cadviet.com/upfiles/3/cad2excel2.lsp

  • 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

@Bác ĐVH : Bác đổi foreach sang repeat và dùng Index làm chi ạ ^^

Ngoài ra, nếu dùng *Text thì bác cũng cần xử lý trường hợp có Rtext ạ

Theo e thì viết kiểu như thế này :

(defun C:HA1(/ lst fn fw i j) ;Doan Van Ha Cadviet.com
(princ "\nChon cac Text/Mtext/Dimension can xuat ra file...")
(setq lst (mapcar 'entget (acet-ss-to-list (ssget '((0 . "*TEXT,DIMENSION")))))
   	fn (getfiled "Chon file de save" "" "csv" 1)
   	fw (open fn "w") i 0 j 0)
(foreach n lst
(princ
 (cond
  ((wcmatch (cdadr n) "*TEXT")(strcat (acet-dxf 1 n) ";Text" (itoa (setq i (1+ i))) "\n"))  
  ((= (cdadr n) "DIMENSION")(strcat (if (= (acet-dxf 1 n) "")(rtos (acet-dxf 42 n))(acet-dxf 1 n))  ";Dim" (itoa (setq j (1+ j))) "\n"))
 )
  fw
 )
 )
(close fw))

 

P/s thêm : do bác ĐVH chỉ lấy string dạng thô, nên nếu gặp các MText hoặc DimText có Format thì kết quả xuất ra có thể không được như ý (như trường hợp lỗi đầu tiên kia), chứ không phải là true contents nữa ^^

 

 

@Bác ĐVH : Bác đổi foreach sang repeat và dùng Index làm chi ạ ^^

Ngoài ra, nếu dùng *Text thì bác cũng cần xử lý trường hợp có Rtext ạ

Theo e thì viết kiểu như thế này :

(defun C:HA1(/ lst fn fw i j) ;Doan Van Ha Cadviet.com
(princ "\nChon cac Text/Mtext/Dimension can xuat ra file...")
(setq lst (mapcar 'entget (acet-ss-to-list (ssget '((0 . "*TEXT,DIMENSION")))))
   	fn (getfiled "Chon file de save" "" "csv" 1)
   	fw (open fn "w") i 0 j 0)
(foreach n lst
(princ
 (cond
  ((wcmatch (cdadr n) "*TEXT")(strcat (acet-dxf 1 n) ";Text" (itoa (setq i (1+ i))) "\n"))  
  ((= (cdadr n) "DIMENSION")(strcat (if (= (acet-dxf 1 n) "")(rtos (acet-dxf 42 n))(acet-dxf 1 n))  ";Dim" (itoa (setq j (1+ j))) "\n"))
 )
  fw
 )
 )
(close fw))

 

P/s thêm : do bác ĐVH chỉ lấy string dạng thô, nên nếu gặp các MText hoặc DimText có Format thì kết quả xuất ra có thể không được như ý (như trường hợp lỗi đầu tiên kia), chứ không phải là true contents nữa ^^

Anh ơi, em thấy lisp của anh chạy rất hay. Nhưng em thấy khi kích vào dim thì nó lại cho ra số lẻ anh ạ. Ví dụ: kích thước của em là 38 thì lại cho ra là 376.156. Vậy giờ em chỉ muốn lấy nguyên cái số 38 đó thôi thì phải làm thế nào hả anh? Anh giúp em với ạ! Trân trọng cảm ơn anh rất nhiều.

 

http://www.cadviet.com/upfiles/3/2883_dim.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

 

 

 

Anh ơi, em thấy lisp của anh chạy rất hay. Nhưng em thấy khi kích vào dim thì nó lại cho ra số lẻ anh ạ. Ví dụ: kích thước của em là 38 thì lại cho ra là 376.156. Vậy giờ em chỉ muốn lấy nguyên cái số 38 đó thôi thì phải làm thế nào hả anh? Anh giúp em với ạ! Trân trọng cảm ơn anh rất nhiều.

 

http://www.cadviet.c.../3/2883_dim.rar

Thay (rtos (acet-dxf 42 n))

Bằng (rtos (acet-dxf 42 n) 2 0)

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

Nhờ Bác Doan Van Ha và các Bác trong diễn ðàn có thể giúp em sửa lisp này với mục ðích sau ðýợc không ạ:

Trýờng hợp 1 [select từng Dimension):

Lựa chọn (Select) Số thứ tự rồi chọn Dimension. Cuối cùng xuất ra file excel có dạng:

STT   Khoảng cách

5    37

6    26

7    29

8    34

.........

Trýờng hợp 2 [select Ðiểm ðầu - Ðiểm cuối]:

Lựa chọn (Seclect) Dimension ðầu tiên (Dimension 1) rồi chọn Dimension cuối (Dimension n). Cuối cùng cho ra file excel có dạng:

STT                               Khoảng cách

Dimension 1                  37

Dimension 2                  26

Dimension 3                  29

Dimension 4                  37

Dimension 5                  32

..........................................

Dimension 29                40

Link file:

http://www.cadviet.com/upfiles/3/2883_hoi_3.dwg

Em trân trọng cảm õ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

Cái này do format CVS ở máy Ketxu nhận dấu ; làm dấu phân cách, bạn sửa trong code chỗ ";Text" , ";Dim" thành ",Text" , ",Dim" là được

Bác hay quá ,em da sua theo va da ok.Bac giup em sua tiep code xuat  de xuat ra du lieu kieu nhu the này được ko ạ:

trong file  xuat csv:

 

    Stt        Ten                               VL       Dai         Rong         Cao             SL      Ma

     1        Ván n\U+1EC7m 1        MDF    1300      650            475             1       ABC1

     2        Ván n\U+1EC7m 2        PB       1600      670            475             4       ABC2

(trong cad là "ván nệm" khi xuất thì "Ván n\U+1EC7m",cái này em sẽ tự sửa chính tả )

Và co hien yeu cau moi lan chon doi tuong .vidu : " Hay chon ten :" ,"hay chon VL:"....co o command.Vong lap la 7 chon  thi xuong hang nhu bang .Bac giup em nha.

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

Em hiện phải vẽ triển khai bản vẽ chi tiết và tổng hợp khối lượng các cấu kiện đc vẽ sẵn trên 1 bản vẽ layout

Do đó em cần thống kê lại trên excel các thông số như dimesion, text đã đc ghi sẵn trên từng cấu kiện trong bản vẽ layout đó.

Công việc này rất nhàm chán, và dễ sai sót vì mất công phải xem, đọc, Alt+tab qua excel, ....

Vậy bác nào có thể viết cho em 1 cái lisp mà em chỉ cần pick vào các text, dimension và Enter là nó xuất ra các giá trị của text, dimension đó ra 1 file text (csv hay txt)

 

Quan trọng là trong file text đó, các giá trị đc sắp xếp theo thứ tự mà em đã pick trên bản vẽ

 

Cảm ơn các bác

Chúc các bác một cuối tuần vui vẻ!

 Để lấy hết thuộc tính đối tượng bất ky bạn vào Tools - Data Extra tion là có thể xuất ra excell hoac txt và có thể chỉnh sửa cập nhật trở 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 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))

sao em load và gõ lệnh nó báo lỗi vậy"Select objects:  ; error: no function definition: ACET-SS-TO-LIST" bạc hà giúp em vớ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

từ list này xin nhờ các bác giúp em nâng cấp thêm :

1. lấy giá trị tiền tố trước giá trị DIM (VD: dim = -3 có thể xuất ra -3)

2. lấy được định dạng bold nếu bên dim có khai báo (vd: dim = 3 thì xuất text là 3

3. lấy được định dạng chữ nghiêng nếu bên Dim có khai báo

rất cảm ơn các bác.

 

(defun C:HA1(/ lst fn fw i j) ;Doan Van Ha Cadviet.com
(princ "\nChon cac Text/Mtext/Dimension can xuat ra file...")
(setq lst (mapcar 'entget (acet-ss-to-list (ssget '((0 . "*TEXT,DIMENSION")))))
    fn (getfiled "Chon file de save" "" "csv" 1)
    fw (open fn "w") i 0 j 0)
(foreach n lst
(princ
(cond
((wcmatch (cdadr n) "*TEXT")(strcat (acet-dxf 1 n) ";Text" (itoa (setq i (1+ i))) "\n"))
((= (cdadr n) "DIMENSION")(strcat (if (= (acet-dxf 1 n) "")(rtos (acet-dxf 42 n))(acet-dxf 1 n)) ";Dim" (itoa (setq j (1+ j))) "\n"))
)
fw
)
)
(close fw))

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

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 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.com/forum/topic/14099-su-dung-clipboard-trong-lisp-copy-va-paste-du-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

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 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.com/forum/topic/14099-su-dung-clipboard-trong-lisp-copy-va-paste-du-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

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

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

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

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

  • Vote tăng 2

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 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.autocadproblems.com/2014/12/export-texts-to-excel-sheet-autocad-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 :)

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

 

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!

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ác Pro cho em hỏi chút. Hiện em dùng Cad 2015. Mỗi lần load Lisp cad "ha" như ở trên thì không nhận lệnh của lisp cad mà lại nhận thành lệnh Hatch. Em đã kiểm tra trong bảng lệnh thì lệnh đó không trùng với lệnh nào. Xin được tiếp thu cao kiến của các Pro.http://www.cadviet.com/upfiles/7/162459_ha_xuat_dim2text.lsp

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 cac anh,
Nhờ anh viết dùm em lisp với nội dung như ở dưới được không ạ.

 Click vào đối tượng dim => dim doi thanh mau vang+đánh stt vào trước dim  và xuất ra TEXT

(VD: em đang có dim ghi kích thước 2000 => click chuột dim chuyển thành 1-2000 (màu vàng) và xuất giá trị này ra text 

Mong được cac anh  giúp đỡ

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

Nhờ các đồng nghiệp giúp cho chút, không muốn lấy tên dim mà lấy luôn tên đối tượng có được ko? nhờ các đồng nghiệp chỉnh lisp cho. xin cảm ơ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

×