Chuyển đến nội dung
Diễn đàn CADViet
npkh1981

chuyển số liệu text từ cad sang excell

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

Cái này để bác PTB xem, sửa và giải thích luôn thể, vì bác ấy đang online.

Hề hề hề,

Bác này trốn việc nhanh thế. Thực ra thì việc trả lời bạn ấy không dễ dàng gì vì bạn ấy không gửi cái bản vẽ không xuất được text đó lên. Thôi thì cứ trả lời theo kiểu đoán mò của mình vậy.

1/- Có thể bạn ấy vẽ lwpolyline không phải là màu 63.

2/- Cũng có thể bạn ấy vẽ bẳng lệnh line chứ không phải là polyline. Vì thế mà không chọn được đối tượng cũng như hàm acet-geom-vertex-list không có tác dụng.

3/- Việc tạo bộ chọn có cả màu và layer thực chất chỉ nhằm để tránh chọn nhầm đối tượng mà thôi. Tuy nhiên nếu không quản lý đối tượng tốt thì sẽ lại là việc gây cản trở cho lisp. Vì vậy người dùng rất cần phải hiểu rõ về bộ chọn này.

 

Hề hề hề, hy vọng rằng bác không bực mình vì trả lời mò thế này.

Hề hề hề.

  • 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

Hề hề hề,

Bác này trốn việc nhanh thế. Thực ra thì việc trả lời bạn ấy không dễ dàng gì vì bạn ấy không gửi cái bản vẽ không xuất được text đó lên. Thôi thì cứ trả lời theo kiểu đoán mò của mình vậy.

1/- Có thể bạn ấy vẽ lwpolyline không phải là màu 63.

2/- Cũng có thể bạn ấy vẽ bẳng lệnh line chứ không phải là polyline. Vì thế mà không chọn được đối tượng cũng như hàm acet-geom-vertex-list không có tác dụng.

3/- Việc tạo bộ chọn có cả màu và layer thực chất chỉ nhằm để tránh chọn nhầm đối tượng mà thôi. Tuy nhiên nếu không quản lý đối tượng tốt thì sẽ lại là việc gây cản trở cho lisp. Vì vậy người dùng rất cần phải hiểu rõ về bộ chọn này.

 

Hề hề hề, hy vọng rằng bác không bực mình vì trả lời mò thế này.

Hề hề hề.

Xin lỗi, mình đã gởi bản vẽ yêu cầu xuất ra cvs phần trên. mong được bạn 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

Vẩn không xuất ra cvs được bạn ơi

Nhưng tại sao mình lại chuyển cùng màu và cùng lớp vậy bạn ?

khi đã thay đổi

(setq sslst (acet-ss-to-list (ssget (list (cons 0 "LWPOLYLINE") (cons 62 63) (cons 8 "Main_tach_o"))))

tlst "" )

http://www.cadviet.c...14381_ycau4.dwg

sửa lại cho bạn theo code của bác Bình :

Sorry bác Bình vì lược bỏ những phần không cần thiết.

(defun c:xt2ex (/ c1 c2 c3 c4 c5 c6 c7 c8 f filename lay sslst tmp)
(vl-load-com)
(if (and (setq sslst (acet-ss-to-list (ssget (list (cons 0 "LWPOLYLINE") (cons 8 "Main_tach_o")))))
(setq filename (getfiled "Select a File" "" "csv" 1))  )
 (progn
   (setq f (open filename "a"))
   (write-line "Main_STT,Main_H_Dap,Main_S_Dap,Main_V_Dap,Main_H_Dao,Main_S_Dao,Main_V_Dao,Main_S_O" f)
   (foreach e sslst
     (foreach en (acet-ss-to-list (ssget "wp" (acet-geom-vertex-list e) (list (cons 0 "text"))  ))
(setq lay (cdr (assoc 8 (entget en)))
    tmp (cdr (assoc 1 (entget en))) )
(setq C1 "STT" C2 " " C3 " " C4 " " C5 " " C6 " " C7 " " C8 " ")
(cond
( (= lay "Main_STT")   (setq C1 tmp ) )
( (= lay "Main_H_Dap") (setq C2 tmp ) )
( (= lay "Main_S_Dap") (setq C3 tmp ) )
( (= lay "Main_V_Dap") (setq C4 tmp ) )
( (= lay "Main_H_Dao") (setq C5 tmp ) )
( (= lay "Main_S_Dao") (setq C6 tmp ) )
( (= lay "Main_V_Dao") (setq C7 tmp ) )
( (= lay "Main_S_O")   (setq C8 tmp ) )         ))      
     (write-line (strcat C1 (chr 44) C2 (chr 44) C3 (chr 44) C4 (chr 44) C5 (chr 44) C6 (chr 44) C7 (chr 44) C8) f)  )
   (close f)))    
   (princ))

Chỉnh sửa theo gia_bach
  • 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

Xin chân thành cám ơn tất cả các bạn đã giúp.

Xin nhờ bạn giúp cho việc xuất các text của lớp Main_STT ( trong đa giác ) và text lớp Main_CDTN tại các đỉnh hay gần đỉnh đa giác trên ra file csv theo hàng ngang trong từng đa giác theo tên của lớp Main_STT . Mục đích để xuất cao độ tự nhiên của các mắt ô đỉnh đa giác.( STT, cdtn, cdtn , .... )

http://www.cadviet.com/upfiles/3/114381_ycau5.dwg

Rất 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

 

 

Hề hề hề,

Y nghĩa của các dòng code mà mình đã viết thực ra chỉ là cái mình mót được từ mọi người ở trên diễn đàn chứ có phải cao siêu gì đâu. Chỉ là bạn cần dành chút thời gian để tìm hiểu về lisp và làm thử vài lần sẽ quen thôi mà.

Cụ thể như sau:

1/- (defun c:xt2ex (/ oldos sslst tlst filename f sslst1 C1 C2 C3 C4 C5 C6 C7 C8 )

Khai báo tên lệnh lisp, đặt các biến sử dụng là biến cục bộ để nó bị triệt tiêu sau khi chạy lisp

2/- (vl-load-com) load các hàm vl- và các lệnh sử dụng trong express tool

3/- (command "undo" "be") đánh dấu nơi bắt đầu đặt lệnh undo

4/- (setq oldos (getvar "osmode")) Lấy giá trị biến hệ thống osmode hiện hành

5/- (setvar "osmode" 0) Đặt biến hệ thống osmode về 0 để tránh truy bắt nhầm điểm.

6/- (setq sslst (acet-ss-to-list (ssget (list (cons 0 "circle") (cons 62 63) (cons 8 "main_circleKQ"))))

tlst "" )

Đặt tên biến sslst là một danh sách tên các đối tượng vòng tròn được chọn bởi lệnh ssget. Về cú pháp và chức năng của lệnh này bạn tham khảo trong Help Developer của CAD,

Đặt biến tlst là một chuỗi trống (không chứa ký tự nào)

7/- (setq filename (getfiled "Select a File" "" "csv" 1)) Đặt biến filename là tên file được chọn từ hộp thoại của lệnh Getfiled. Xem thêm Help developer để hiểu về lệnh này.

8/- (setq f (open filename "w")) Mở file có filename đã chọn để ghi nội dung mới vào file và lưu biến thao tác này là f.

9/- (write-line "Main_STT,Main_H_Dap,Main_S_Dap,Main_V_Dap,Main_H_Dao,Main_S_Dao,Main_V_Dao,Main_S_O," f)

Ghi một dòng text vào file đã mở, dấu , dùng ngăn cách giữa các cột trong file

10/- (foreach e sslst

Mở hàm foreach để lặp qua tất cả các đối tượng có trong danh sách các ename đã được chọn ở phía trên (biến sslst)

Các nhiệm vụ cần làm trong mỗi lần lặp được liệt kê như sau:

a/- (setq sslst1 (acet-ss-to-list (ssget "w" (list (- (cadr (assoc 10 (entget e))) (cdr (assoc 40 (entget e))))

(- (caddr (assoc 10 (entget e))) (cdr (assoc 40 (entget e))))

)

(list (+ (cadr (assoc 10 (entget e))) (cdr (assoc 40 (entget e))))

(+ (caddr (assoc 10 (entget e))) (cdr (assoc 40 (entget e))))

)

(list (cons 0 "text")) )) )

Lấy một danh sách các đối tượng text có trong mỗi vòng tròn. Tham khảo thêm về lệnh ssget với tham số "w" trong help developer.

b/- (setq C1 nil C2 nil C3 nil C4 nil C5 nil C6 nil C7 nil C8 nil), Đặt các biến C1 ..... C8 về giá trị nil (chả có gì)

c,d,e,f,g,h,i,k/- (foreach en sslst1

(if (= (cdr (assoc 8 (entget en))) "Main_STT")

(setq C1 (cdr (assoc 1 (entget en))) )

)

)

Tạo 8 vòng lặp qua các đối tượng text được chọn trong danh sách sslst1 để lấy giá trị của 8 biến C1 ... C8 theo tên các lớp của mỗi text

l/- (setq tlst (strcat (if C1 C1 " ") (chr 44) (if C2 C2 " ") (chr 44) (if C3 C3 " ") (chr 44) (if C4 C4 " ") (chr 44)

(if C5 C5 " ") (chr 44) (if C6 C6 " ") (chr 44) (if C7 C7 " ") (chr 44) (if C8 C8 " ") (chr 44) ))

Đặt biến tlst là một chuỗi gồm giá trị các biến từ C1 đến C8 với dấu ngăn cách cột là ","

m/- (write-line tlst f) Ghi giá trị chuổi này vào file đã mở f ở trên

n/- (setq tlst "") Trả biến tlst về chuỗi trống.

11/- ) Kết thúc vòng lặp foreach.

12/- (close f) Đóng file f đã mở phía trên.

13/- (setvar "osmode" oldos) Trả biến hệ thống osmode về giá trị ban đầu trước khi chạy lisp

14/- (command "undo" "e") Đánh dấu nơi kết thúc của lệnh undo. Điều này để giúp người dùng khi cần có thể khôi phục nhanh bản vẽ đã bị lisp làm thay đổi.

15/- (princ) Xóa sạch biến cuối cùng do lisp tạo ra và trả về nil. Thoát êm

16/- ) Kết thúc lệnh lisp (defun c:xt2ex .... đã bắt đầu phía trên.

 

Nói thì như vậy nhưng thực tế để vận dụng tốt các hàm lisp phía trên cũng cần có thời gian để đọc và thực hành. Bạn chớ có sợ nó rậm rì rắc rối, Bước đấu có thể hơi ngại ngùng như khi gặp gái trinh, nhưng cứ thọc vào bạn sẽ thấy khoái dần và nổi hứng với nó không chừng. Cứ từ từ mà vọc. Dục tốc bất đạt. Mưa dần thấm đất, rồi sẽ tời lúc nó nhũn ra như con chi chi, bạn tha hồ mà thọc mà ngoáy, mà mấn mà mò, chả còn biết sợ là gì nữa đâu.

 

Hề hề hề,...

Cám ơn bạn đã hướng dẫn. Lisp này mình chọn tất cả và xuất ra file cvs, mình muốn nhờ bạn chỉnh thêm tí, vì công việc phát sing mình phải chọn từng ô để xuất ra file. lần nhất chọn lần lược 1 hoăc 2 ô, xuất ra file. Sau đó mình chọn thêm các ô khác nửa sẻ xuất ra file ghi nối vào file cũ .

Xin được bạn giúp. 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

- Hehe thanks a Tue, nhoc xin phép đc mót lsp #10 của anh về dùng ^^, nhoc cũng đang cần 1lsp giống vậy , việc edit lại xíu theo nhu cầu riêng chắc nhoc làm đc  :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

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

×