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

[ yêu cầu ] Lisp up nội dung từ Excel vào Cad

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

Cám ơn Bạn thật nhiều

 

Lisp mới đây. Tuy nhiên cách bạn đang làm việc hơi thiếu khoa học, làm lấy được chứ chưa có phương pháp tối ưu. Nếu quản lý đối tượng bằng block thuộc tính thì cách nhập số liệu đơn giản hơn nhiều. Lần đầu bạn muốn nhập số liệu với 4 cột, lần này là 6 cột, lần thứ n thì bao nhiêu? Tất cả điều này được giải quyết dễ dàng và đơn giản bằng cách sử dụng block thuộc tính. Muốn bao nhiêu số liệu thì chỉ cần thay đổi block thuộc tính là được thôi chứ không mất thời gian ngồi đo đo tính tính vị trí các Text rồi nhét vào trong code như mình đã làm. Mặt khác để Text như trên bản vẽ của bạn thì lại chưa có Lisp xuất ngược ra txt. Và nói trước là mình sẽ không chạy theo yêu cầu của bạn một lần nữa đâu nhé. Nếu bạn dùng block thuộc tính thì xuất ngược xuôi gì đều được hết.

 

Cám ơn Bạn KangKung thật nhiều nha.

Xin Bạn giúp :

1. Nếu như mình sử dụng Block thuộc tính file a.dwg mà hiện nay mình có thay đổi từ 4 cột lên 6 cột, thì phải chỉnh Block và lisp như thế nào ( sử dụng file mẫu gời ở trên )?

2. Vòng tròn có hay đổi bán kính?

3. Nhập vào và xuất ra ?

Mong Bạn thông cảm và giúp đỡ.

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

Lisp mới đây. Trước khi chạy bạn Copy cái này vào Support:

http://www.cadviet.com/upfiles/3/71162_block_tientracdia.dwg

(Chú ý: sau khi download về thì đổi tên File thành BLOCK_TIENTRACDIA.dwg)

Sau khi chạy Lisp thì số liệu sẽ là Block thuộc tính. Dùng Lisp ở #11 để xuất ngược lại sang TXT. Nếu muốn số liệu trên bản vẽ là các Text bình thường thì dùng lệnh BURST để phá vỡ các Block thuộc tính.

;========LISP UPDATE SO LIEU TU FILE TXT VAO CADU==========
;================KANGKUNG 25/03/2013=======================
;=================UPDATED 05/04/2013=======================
(defun C:KK()
  (command "UNDO" "BE")
  (setq taphop(ssget '((0 . "TEXT"))))
  (setq os(getvar "OSMODE"))
  (setvar "OSMODE" 0)
  (if (not Path)
    (setq Path(getvar "dwgprefix")))
  (setq file(getfiled "Select File:" Path "txt" 2))
  (setq Path file)
  (setq index 0)
  (setq TEXT_LIST (list))
  (while (< index (sslength taphop))
    (setq TEXT (entget (ssname taphop index)))
    (if (/= (read (cdr(assoc 1 TEXT))) (atof (cdr(assoc 1 TEXT))))
      (progn
	(setq String(cdr(assoc 1 TEXT)))
	(if (= (+ (cdr(assoc 72 TEXT)) (cdr(assoc 73 TEXT))) 0)
	  (setq InsertPoint(cdr(assoc 10 TEXT)))
	  (setq InsertPoint(cdr(assoc 11 TEXT)))
	  )
	(setq TEXT_LIST (append (list (list String InsertPoint)) TEXT_LIST))
	)
      )
    (setq index (1+ index))
    )
  (setq file_in(open file "R"))
  (setq lst_solieu(list))
  (while(setq txt(read-line file_in))
    (if (/= txt nil) (setq lst (read (strcat "(" txt ")"  ))))
    (foreach dt TEXT_LIST
      (if (= (car dt) (vl-princ-to-string(car lst)))
	(progn
	  (setq pt(cadr dt))
	  (command "ZOOM" "W" (list (- (car pt) 3) (+ (cadr pt) 2)) (list (+ (car pt) 3) (- (cadr pt) 5)))
	  (command "ERASE" "W" (list (- (car pt) 3) (+ (cadr pt) 2)) (list (+ (car pt) 3) (- (cadr pt) 5)) "")
	  (command "INSERT"  "BLOCK_TIENTRACDIA"  pt  "1" "1" "0"
		   (vl-princ-to-string(car lst))
		   (rtos (nth 1 lst) 2 2)
		   (rtos (nth 2 lst) 2 2)
		   (rtos (nth 3 lst) 2 2)
		   (rtos (nth 4 lst) 2 2)
		   (rtos (nth 5 lst) 2 2)
		 )
	  )
	)
      )
    )
  (close file_in)
  (setvar "OSMODE" os)
  (command "UNDO" "END")
  (alert "Da xong \n\n Muon pha Block thi dung lenh BURST")
  (princ "\n BURST de pha Block")
  (princ)
  )
(princ "\n                Written By KangKung - 25/03/2013\n")
(princ "\n                  Nhap KK de chay chuong trinh\n")
  • Like 1
  • 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

Một người chỉ nhấn xanh cho 1 bài 1 lần.

Một người chỉ nhấn xanh trong 1 ngày số lượng có hạn.

 

Khi có lỗi gì thì thường có thông báo. Tập thói quen hỏi, yêu cầu gì cũng kèm theo bằng chứng cụ thể để đỡ nhọc người muố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

 

Lisp mới đây. Trước khi chạy bạn Copy cái này vào Support:

http://www.cadviet.com/upfiles/3/71162_block_tientracdia.dwg

(Chú ý: sau khi download về thì đổi tên File thành BLOCK_TIENTRACDIA.dwg)

Sau khi chạy Lisp thì số liệu sẽ là Block thuộc tính. Dùng Lisp ở #11 để xuất ngược lại sang TXT. Nếu muốn số liệu trên bản vẽ là các Text bình thường thì dùng lệnh BURST để phá vỡ các Block thuộc tính.

;========LISP UPDATE SO LIEU TU FILE TXT VAO CADU==========
;================KANGKUNG 25/03/2013=======================
;=================UPDATED 05/04/2013=======================
(defun C:KK()
  (command "UNDO" "BE")
  (setq taphop(ssget '((0 . "TEXT"))))
  (setq os(getvar "OSMODE"))
  (setvar "OSMODE" 0)
  (if (not Path)
    (setq Path(getvar "dwgprefix")))
  (setq file(getfiled "Select File:" Path "txt" 2))
  (setq Path file)
  (setq index 0)
  (setq TEXT_LIST (list))
  (while (< index (sslength taphop))
    (setq TEXT (entget (ssname taphop index)))
    (if (/= (read (cdr(assoc 1 TEXT))) (atof (cdr(assoc 1 TEXT))))
      (progn
	(setq String(cdr(assoc 1 TEXT)))
	(if (= (+ (cdr(assoc 72 TEXT)) (cdr(assoc 73 TEXT))) 0)
	  (setq InsertPoint(cdr(assoc 10 TEXT)))
	  (setq InsertPoint(cdr(assoc 11 TEXT)))
	  )
	(setq TEXT_LIST (append (list (list String InsertPoint)) TEXT_LIST))
	)
      )
    (setq index (1+ index))
    )
  (setq file_in(open file "R"))
  (setq lst_solieu(list))
  (while(setq txt(read-line file_in))
    (if (/= txt nil) (setq lst (read (strcat "(" txt ")"  ))))
    (foreach dt TEXT_LIST
      (if (= (car dt) (vl-princ-to-string(car lst)))
	(progn
	  (setq pt(cadr dt))
	  (command "ZOOM" "W" (list (- (car pt) 3) (+ (cadr pt) 2)) (list (+ (car pt) 3) (- (cadr pt) 5)))
	  (command "ERASE" "W" (list (- (car pt) 3) (+ (cadr pt) 2)) (list (+ (car pt) 3) (- (cadr pt) 5)) "")
	  (command "INSERT"  "BLOCK_TIENTRACDIA"  pt  "1" "1" "0"
		   (vl-princ-to-string(car lst))
		   (rtos (nth 1 lst) 2 2)
		   (rtos (nth 2 lst) 2 2)
		   (rtos (nth 3 lst) 2 2)
		   (rtos (nth 4 lst) 2 2)
		   (rtos (nth 5 lst) 2 2)
		 )
	  )
	)
      )
    )
  (close file_in)
  (setvar "OSMODE" os)
  (command "UNDO" "END")
  (alert "Da xong \n\n Muon pha Block thi dung lenh BURST")
  (princ "\n BURST de pha Block")
  (princ)
  )
(princ "\n                Written By KangKung - 25/03/2013\n")
(princ "\n                  Nhap KK de chay chuong trinh\n")

Đúng là ứng dụng block thuộc tính thực hiện rất hay, mình chưa hiểu được về vấn đề này.

Công việc mình cần nhiều dạng thực hiện như vầy lắm, muốn thêm vào nhiều dử liệu tính toán, sợ làm phiền bạn viết hoài.

Mong muốn Bạn giải thích cho mình ý nghĩa các đoạn lệnh của Lisp trên, để tự nghiên cứu chỉnh lý theo yêu cầu về sau.

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 KangKung dạo này rảnh quá ha. Hii. Bác có ý tưởng nào mới không thế? Toàn viết theo yêu cầu thế vậy bác?

@Tientracdia: Mình tin bạn sẽ còn hỏi tiếp nữa vì bạn mới hỏi cách nhập, cách xuất bạn chưa hỏi. Lại làm phiền bác KangKung cho mà xem. Mời bác ấy bia đê. Mùa hè rồi đoá. Hè hè

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ách xuất bạn KangKung đã có hướng dẫn rồi Bạn.

Bây giờ mình cần hiểu về nguyên lý nhập data theo vị trí của block thuộc tính :

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ách xuất bạn KangKung đã có hướng dẫn rồi Bạn.

Bây giờ mình cần hiểu về nguyên lý nhập data theo vị trí của block thuộc tính :

Srr mình không đọc hết. Lần sau chú ý đọc hết mới nói.

Nguyên lý nhập Data theo vị trí của Block Att thì đơn giản thôi. 

Ví dụ: Khi bạn có 3 thuộc tính chẳng hạn, do vậy thuộc tính nào được tạo trước thì khi Insert nó sẽ được hiển thị trước.

Để kiểm tra thằng nào chèn trước thì bạn mở 1 bản cad ra, dùng lệnh insert và chọn file cad chưa att đó. Nó sẽ hỏi thằng nào chèn trước, thằng nào chèn tiếp theo và bạn lấy bút ghi ra giấy là biết thứ tự att ngay ấy mà. Nếu bạn muốn theo ý của bạn chèn cái thằng nào trước thằng nào sau thì tốt nhất bạn làm luôn block thuộc tính lại từ đầu.

Ví dụ cụ thể hơn: Bạn có 3 thuộc tính (số thứ tự - cao độ - Code)

Dùng lệnh att và đặt tên là STT

Dùng lệnh att và đặt tên là Caodo

Dùng lệnh att và đặt tên là Code

Như vậy khi bạn chèn vào bản vẽ nó sẽ hỏi theo đúng trình tự  mà bạn đã tạo.

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 KangKung dạo này rảnh quá ha. Hii. Bác có ý tưởng nào mới không thế? Toàn viết theo yêu cầu thế vậy bác?

@Tientracdia: Mình tin bạn sẽ còn hỏi tiếp nữa vì bạn mới hỏi cách nhập, cách xuất bạn chưa hỏi. Lại làm phiền bác KangKung cho mà xem. Mời bác ấy bia đê. Mùa hè rồi đoá. Hè hè

Chào chú thanhduan. Dạo này anh cũng tương đối nhàn rỗi nên có nhiều thời gian vào diễn đàn. Thấy một số vấn đề anh em thắc mắc mình có thể giải quyết được nên giúp đỡ thôi.

Ý tưởng mới thì cũng không có nhiều, có một số cái dùng cho công việc còn lại chủ yếu toàn do người khác gợi ý nên viết thôi. Anh vừa viết xong chương trình xử lý số liệu đo dòng chảy (ADCP) và một số chương trình mang tính vui chơi giải trí là chính chả có ứng dụng thực tế mấy.

  • 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

Vậy hả anh! ^^

Lúc nhàn rỗi thì mình có thời gian nghiên cứu để khi có công trình thì đưa vào ứng dụng, ngày trước em cũng toàn viết ứng dụng cho công việc. Mình làm việc nào thì viết ứng dụng đó thôi. Em lâu rồi cũng ko viết, lại đi chuyên sâu vào mảng khác anh ạ.

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ình cờ gặp pic này đúng thứ mình đang làm, nhưng mình có thắc như thế này:

- Trong CAD đã có sẵn 2 lệnh ATTUOT và ATTIN. Lệnh làm việc như sau :

  + Đầu tiên ATTUOT các block thuộc tính ra 1 file txt

  + Sau đó chếp nôi dung file txt vào exl, trên file exl sẽ có hàng và cột theo thuộc tính của Block ATT

  + Chỉnh sửa nội dung file exl ròi xuất về dạng txt

  + Kết thúc dùng lệnh ATTIN nhập dữ liệu từ file txt vào CAD. 

- Vấn đề dặt ra là phải có file trung gian txt, vậy có cách nào bỏ qua được bước trung gian này 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

Xuất ra (Attout) thì phải có cái để... chứa >> cần txt.

Nhập vào (Attin) thì phải từ... kho. >> cần txt.

Cái cần bỏ là file excel chứ nhỉ? Nếu vậy thì bạn edit trực tiếp trên txt?

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

Xuất ra (Attout) thì phải có cái để... chứa >> cần txt.

Nhập vào (Attin) thì phải từ... kho. >> cần txt.

Cái cần bỏ là file excel chứ nhỉ? Nếu vậy thì bạn edit trực tiếp trên txt?

 

Dùng Excel có thể mở và edit được và lưu file txt. Không cần phát sinh thêm 1 file .xls nữa bác ạ.

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 bác cho em hỏi: Sao em thực hiện lệnh ATTOUT thì không vấn đề gì, nhưng khi khi sửa số liệu thì ATTIN nó chỉ cập nhật giá trị của Block đầu tiê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

Minh sưu tầm được lisp cập nhật dữ liệu attribute từ file cvs rất hay nhưng không dùng được tiếng việt unicode, có bạn nào biết cách chỉnh giúp mình không. Thanks

http://www.cadviet.com/upfiles/3/100340_updatetitleblockv16_1.lsp

  • 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
Vào lúc 21/8/2013 tại 02:01, lexussc430 đã nói:

Minh sưu tầm được lisp cập nhật dữ liệu attribute từ file cvs rất hay nhưng không dùng được tiếng việt unicode, có bạn nào biết cách chỉnh giúp mình không. Thanks

http://www.cadviet.com/upfiles/3/100340_updatetitleblockv16_1.lsp

mình thử thấy ko đc dù chuyển font của csv thành font *.Vn rồi, cái font csv cần để đưa sang cad cấu trúc thành phần thế nào vậy bạ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
32 phút trước, batitus đã nói:

nhờ cccm giúp em chuyển dữ liệu từ file cad sang file excel nhưng file dính kèm được không ?

KL excel.rar

KL.dwg

Bạn find and Replace Lý trình thành Km thì sử dụng lisp của mình là được nhé

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

×