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

Chuyển từ excel sang Block ATTDEF

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

Chào các bác!

Các bác có các nào chuyển từ Excel sang cad - Block ATTDEF như thế này không, giúp tôi với!

ví dụ đây là file cad và flie excel cần chuyển

http://www.cadviet.com/upfiles/3/desktop_1.rar

Xin cảm ơn trướ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
Chào các bác!

Các bác có các nào chuyển từ Excel sang cad - Block ATTDEF như thế này không, giúp tôi với!

ví dụ đây là file cad và flie excel cần chuyển

http://www.cadviet.com/upfiles/3/desktop_1.rar

Xin cảm ơn trước!

Hề hề hề,

Chào bác Gia Cát Manhhungxda.

Có phải bác cần cái nè không hỉ??? Cứ thử coi, trúng trật sửa tiếp hỉ.

(defun Separate (S sym / i L ch)
(setq i 0 L nil)
(while (      (setq i (1+ i) ch (substr S i 1))
     (if (= ch sym) (progn
(setq
      L (append L (list (substr S 1 (- i 1))))
      S (substr S (1+ i) (- (strlen S) i))
      i 0
)
     ))	
)
(append L (list S))
)
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
(defun c:nhapatt ()
(setq  fn (getfiled "Select Data File" "" "csv" 0)
        f (open fn "r")
)
;;;;(read-line f)
(while (setq S (read-line f))
        (setq L (separate S ",")
                STT (nth 1 L)
                Forder (nth 2 L)
                TenCkien (nth 3 L)
                TTCT (nth 6 L)
                TenCT (nth 4 L)
                LoaiVL (nth 5 L)
                Day (nth 11 L)
                Rong (nth 9 L)
                Dai (nth 10 L)
                SlgCT (nth 8 L)
                DVT (nth 7 L)
                Gchu (nth 12 L)
                PT (getpoint "\n Chon diem nhap")
         )
         (alert (strcat "\n Ten chi tiet là " TenCT))
         (if (and (= (setq ans (strcase (getstring "\n Ban muon nhap chi tiet nay (y or n): "))) "Y") PT)
         (Command "insert" "Ghicaukien" PT "" "" "" 
                                      STT Forder TenCkien TTCT TenCT LoaiVL Day Rong Dai SlgCT DVT Gchu )
         )
)
(close f)
(princ)
)

 

Hề hề hề, bác nhớ là phải save cái thằng Excel của bác qua thành file *.cvs đã rồi mới chạy lisp từ file dữ liệu này nhé. Cái này mình mót của bác SSG nên chỉ biết vậy. Muốn rõ hơn thì cứ nhè bác ấy mà gõ hỉ. Mình không giải thích được đâu. 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

anh Bình ơi,

Như vậy, khi nhập ta phải nhập hết danh sách, nếu ta dừng lại, nó sẽ pải nhập lại từ đầu, có cách nào mà ta gõ số thứ tự bao nhiều vi đụ gõ stt "79" nó sẽ xuất dòng TT 79 tương ứng qua không anh?

 

Tóm lại:

e muốn nó chạy vòng lặp để điền toàn bộ danh sách vào "ghicaukien"

mỗi một dòng excel là nó sẽ insert 1 blockatt "ghicaukien" và nó điền vào tương ứng. (xuát hết)

 

hoặc là nhập số TT rồi nó insert ra mỗi dòng tương ứng thôi!

anh Bình giúp e với

  • 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
anh Bình ơi,

Như vậy, khi nhập ta phải nhập hết danh sách, nếu ta dừng lại, nó sẽ pải nhập lại từ đầu, có cách nào mà ta gõ số thứ tự bao nhiều vi đụ gõ stt "79" nó sẽ xuất dòng TT 79 tương ứng qua không anh?

 

Tóm lại:

e muốn nó chạy vòng lặp để điền toàn bộ danh sách vào "ghicaukien"

mỗi một dòng excel là nó sẽ insert 1 blockatt "ghicaukien" và nó điền vào tương ứng. (xuát hết)

 

hoặc là nhập số TT rồi nó insert ra mỗi dòng tương ứng thôi!

anh Bình giúp e với

Hề hề hề,

Thôi thì cho bác này cả Hai bà Trưng luôn thể kẻo lại chả có người cưỡi voi hỉ????

(defun Separate (S sym / i L ch)
(setq i 0 L nil)
(while (      (setq i (1+ i) ch (substr S i 1))
     (if (= ch sym) (progn
(setq
      L (append L (list (substr S 1 (- i 1))))
      S (substr S (1+ i) (- (strlen S) i))
      i 0
)
     ))	
)
(append L (list S))
)
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
(defun c:nhapatt ()
(setq  fn (getfiled "Select Data File" "" "csv" 0)
       ;;;;;;;;;;;;;;; f (open fn "r")
)
;;;;(read-line f)
(command "undo" "be")
(if (= (setq rep (strcase (getstring "\n Ban muon xuat het cac du lieu (y or n): "))) "Y")
   (progn
           (setq PT (getpoint "\n Chon diem nhap"))
           (setq f (open fn "r"))
           (while (setq S (read-line f))
                    (setq L (separate S ",")
                            STT (nth 1 L)
               	 Forder (nth 2 L)
                	TenCkien (nth 3 L)
                	TTCT (nth 6 L)
                	TenCT (nth 4 L)
               	 LoaiVL (nth 5 L)
               	 Day (nth 11 L)
                	Rong (nth 9 L)
                	Dai (nth 10 L)
               	 SlgCT (nth 8 L)
                	DVT (nth 7 L)
                	Gchu (nth 12 L)                 
         	      )
         ;;;;;;;;;;(alert (strcat "\n Ten chi tiet là " TenCT))
         ;;;;;;;;;;(if (and (= (setq ans (strcase (getstring "\n Ban muon nhap chi tiet nay (y or n): "))) "Y") PT)
                   (Command "insert" "Ghicaukien" PT "" "" "" 
                                      STT Forder TenCkien TTCT TenCT LoaiVL Day Rong Dai SlgCT DVT Gchu )
                   (setq en (entlast)
                           pts (acet-ent-geomextents en)
                           PT (list (caar pts) (+ (cadr (cadr pts)) (- (cadr (cadr pts)) (cadr (car pts)))))
                   )              
             )
             (close f)
    )
    (progn
            (while (/= (setq ddl (getstring "\n Nhap so thu tu cua dong du lieu muon nhap: ")) "" )
            (setq PT1 (getpoint "\n Chon diem nhap"))
            (setq f (open fn "r"))
            (while (setq S (read-line f))
                    (setq L (separate S ",")
                            STT (nth 1 L)
               	 Forder (nth 2 L)
                	TenCkien (nth 3 L)
                	TTCT (nth 6 L)
                	TenCT (nth 4 L)
               	 LoaiVL (nth 5 L)
               	 Day (nth 11 L)
                	Rong (nth 9 L)
                	Dai (nth 10 L)
               	 SlgCT (nth 8 L)
                	DVT (nth 7 L)
                	Gchu (nth 12 L)                 
         	      )
                   (if (= ddl STT)
                       (Command "insert" "Ghicaukien" PT1 "" "" "" 
                                      STT Forder TenCkien TTCT TenCT LoaiVL Day Rong Dai SlgCT DVT Gchu ) 
                   )
           )
           (close f)
           )
     )
)  

(command "undo" "e")

(princ)
)

 

Chú ý: Khi bác muốn nhập các record đơn chứ không phải nhập tuốt thì bác nhập cái số thứ tự nghen. Bác mà nhập lộn số thứ tự này là tiêu đó. Chẳng hạn trong cái bảng của bác cột stt có tới dăm thằng trùng số thì sẽ cả dăm cái thằng ấy nó chui vào cùng một chỗ và uýnh lộn nhau tới mức bác chẳng còn nhòm ra thăng nào đực hay thằng nào lại cái nữa. Hề hề hề...

Mỗi lần lấy một record bác lại phải nhập điểm chèn một phát và do vậy việc các record xếp hàng như khi nhập tuốt luốt phụ thuộc vào tài nghệ pick điểm của bác đó. Giả sử có run tay mà pick liên thuyên cũng chớ có lo, cứ chịu khó nhặt cho hết các record muốn nhặt rồi nhấn enter một phát khi nó hỏi nhập record mới để kết thúc việc chọn record. Sau đó chịu khó dùng CAD mà move nó về cho đạt độ oai là OK hỉ???

Chúc bác thắng lợi nhớn 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ề,

Mỗi lần lấy một record bác lại phải nhập điểm chèn một phát và do vậy việc các record xếp hàng như khi nhập tuốt luốt phụ thuộc vào tài nghệ pick điểm của bác đó. Giả sử có run tay mà pick liên thuyên cũng chớ có lo, cứ chịu khó nhặt cho hết các record muốn nhặt rồi nhấn enter một phát khi nó hỏi nhập record mới để kết thúc việc chọn record. Sau đó chịu khó dùng CAD mà move nó về cho đạt độ oai là OK hỉ???

Chúc bác thắng lợi nhớn hỉ.....

Nếu mà nó không thẳng hàng, e đã có công cụ này (tặng cả nhà luôn - MỤC ĐÍCH LÀ DÓNG ĐỐI TƯỢNG)

Hì hì hì .....

(defun C:DHT (/ thop dtmau dt p1 i p delta dong)
(setq thop (ssget)) 
(setq dtmau (car (entsel "\nChän ®èi t­îng mÉu:")))
(setq dchuan (cdr (assoc 10 (entget dtmau))))
(initget 1 "N D")
(setq dong (strcase (getkword "\nB¹n muèn dãng theo ph­¬ng Däc hay Ngang/(N, D):")))
(setq i 0)
(repeat (sslength thop)
  (setq dt (ssname thop i))
  (setq p (cdr (assoc 10 (entget dt))))
  (cond
(
	(= dong "D")
 (progn
 (setq delta (- (car p) (car dchuan)) )
 (setq p1 (mapcar '- p (list delta 0.0 0.0)))
  )
  )

  (T 
(progn
 (setq delta (- (cadr p) (cadr dchuan)) )
 (setq p1 (mapcar '- p (list 0.0 delta 0.0)))
  ))
  );;; end cond
  (command "move" dt "" p p1)
  (setq i (1+ i))
);;; end repeat
(princ)
)

  • 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
Nếu mà nó không thẳng hàng, e đã có công cụ này (tặng cả nhà luôn - MỤC ĐÍCH LÀ DÓNG ĐỐI TƯỢNG)

Hì hì hì .....

Chào bác Gia cát Manhhungxda,

Biếu bác thêm cặp mũ vua bà kẻo Hai Bà phải để đầu trần đánh trận cũng tội hỉ???

(defun Separate (S sym / i L ch)
(setq i 0 L nil)
(while (      (setq i (1+ i) ch (substr S i 1))
     (if (= ch sym) (progn
(setq
      L (append L (list (substr S 1 (- i 1))))
      S (substr S (1+ i) (- (strlen S) i))
      i 0
)
     ))	
)
(append L (list S))
)
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
(defun c:nhapatt ( / fn f S L STT Forder TenCkien TTCT TenCT LoaiVL Day Rong Dai SlgCT 
                           DVT Gchu PT PT1 en pts)
(setq  fn (getfiled "Select Data File" "" "csv" 0)
       ;;;;;;;;;;;;;;; f (open fn "r")
)
;;;;(read-line f)
(command "undo" "be")
(if (= (setq rep (strcase (getstring "\n Ban muon xuat het cac du lieu (y or n): "))) "Y")
   (progn
           (setq PT (getpoint "\n Chon diem nhap"))
           (setq f (open fn "r"))
           (while (setq S (read-line f))
                    (setq L (separate S ",")
                            STT (nth 1 L)
               	 Forder (nth 2 L)
                	TenCkien (nth 3 L)
                	TTCT (nth 6 L)
                	TenCT (nth 4 L)
               	 LoaiVL (nth 5 L)
               	 Day (nth 11 L)
                	Rong (nth 9 L)
                	Dai (nth 10 L)
               	 SlgCT (nth 8 L)
                	DVT (nth 7 L)
                	Gchu (nth 12 L)                 
         	      )
;;;;;;;;;;(alert (strcat "\n Ten chi tiet là " TenCT))
;;;;;;;;;;(if (and (= (setq ans (strcase (getstring "\n Ban muon nhap chi tiet nay (y or n): "))) "Y") PT)
                   (Command "insert" "Ghicaukien" PT "" "" "" 
                                      STT Forder TenCkien TTCT TenCT LoaiVL Day Rong Dai SlgCT DVT Gchu )
                   (setq en (entlast)
                           pts (acet-ent-geomextents en)
                           PT (list (caar pts) (+ (cadr (cadr pts)) (- (cadr (cadr pts)) (cadr (car pts)))))
                   )              
             )
             (close f)
    )
    (progn
(setq PT1 (getpoint "\n Chon diem nhap"))
             (while (/= (setq ddl (getstring "\n Nhap so thu tu cua dong du lieu muon nhap: ")) "" )            
             (setq f (open fn "r"))
             (while (setq S (read-line f))
                    (setq L (separate S ",")
                            STT (nth 1 L)
               	 Forder (nth 2 L)
                	TenCkien (nth 3 L)
                	TTCT (nth 6 L)
                	TenCT (nth 4 L)
               	 LoaiVL (nth 5 L)
               	 Day (nth 11 L)
                	Rong (nth 9 L)
                	Dai (nth 10 L)
               	 SlgCT (nth 8 L)
                	DVT (nth 7 L)
                	Gchu (nth 12 L)                 
         	      )
                   (if (= ddl STT)
                       (Command "insert" "Ghicaukien" PT1 "" "" "" 
                                      STT Forder TenCkien TTCT TenCT LoaiVL Day Rong Dai SlgCT DVT Gchu ) 
                   )
                   (setq en (entlast)
                           pts (acet-ent-geomextents en)
                           PT1 (list (caar pts) (+ (cadr (cadr pts)) (- (cadr (cadr pts)) (cadr (car pts)))))
                   )              
           )
           (close f)
           )
     )
)  

(command "undo" "e")

(princ)
)

 

Cái này xài khỏi cần dóng dả chi cả. Chỉ nhập điểm nhập một lần rồi sau đó nhập lần lượt các số thứ tự của các dòng cần nhập mỗi khi lisp hỏi, mỗi lần chỉ nhập một số thôi nhé. Theo mình thì nó có vẻ hay hơn song nó lại không tùy nghi chọn chỗ được như thằng cũ. Hề hề hề. Bác có thể save thành hai lisp khác nhau để tùy ý sử dụng hỉ.....

 

Mình đang nghĩ cách cải tiến sao cho một lần nhập có thể nhập luôn vài chục chú chứ chả phải từng chú một. 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
Chào bác Gia cát Manhhungxda,

 

Mình đang nghĩ cách cải tiến sao cho một lần nhập có thể nhập luôn vài chục chú chứ chả phải từng chú một. Hề hề hề....

 

Chào các bác,

Đây là cái hai lisp cải tiến thêm chút xíu cho phép người dùng chỉ cần nhập lần lượt các STT của các dòng cần nhập và sau đó enter là xong. Tuy nhiên có hai điều mình thắc mắc là với cùng cấu trúc, chỉ khác về cách kiểm tra giá trị STT mà tại sao hai lisp này cho kết quả hoàn toàn khác nhau.

Các bác xài thử và cho mình lời giải đáp nhé.

Lisp 1:

(defun Separate (S sym / i L ch)
(setq i 0 L nil)
(while (      (setq i (1+ i) ch (substr S i 1))
     (if (= ch sym) (progn
(setq
      L (append L (list (substr S 1 (- i 1))))
      S (substr S (1+ i) (- (strlen S) i))
      i 0
)
     ))	
)
(append L (list S))
)
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
(defun c:nhapatt ( / fn f S L STT Forder TenCkien TTCT TenCT LoaiVL Day Rong Dai SlgCT 
                           DVT Gchu PT PT1 en pts)
(setq  fn (getfiled "Select Data File" "" "csv" 0)
       ;;;;;;;;;;;;;;; f (open fn "r")
)
;;;;(read-line f)

(command "undo" "be")
(setq PT (getpoint (getvar "lastpoint") "\n Chon diem nhap"))
(if (= (setq rep (strcase (getstring "\n Ban muon xuat het cac du lieu (y or n): "))) "Y")
   (progn
           (setq f (open fn "r"))
           (while (setq S (read-line f))
                    (setq L (separate S ",")
                            STT (nth 1 L)
               	 Forder (nth 2 L)
                	TenCkien (nth 3 L)
                	TTCT (nth 6 L)
                	TenCT (nth 4 L)
               	 LoaiVL (nth 5 L)
               	 Day (nth 11 L)
                	Rong (nth 9 L)
                	Dai (nth 10 L)
               	 SlgCT (nth 8 L)
                	DVT (nth 7 L)
                	Gchu (nth 12 L)                 
         	      )
;;;;;;;;;;(alert (strcat "\n Ten chi tiet là " TenCT))
;;;;;;;;;;(if (and (= (setq ans (strcase (getstring "\n Ban muon nhap chi tiet nay (y or n): "))) "Y") PT)
                   (Command "insert" "Ghicaukien" PT "" "" "" 
                                      STT Forder TenCkien TTCT TenCT LoaiVL Day Rong Dai SlgCT DVT Gchu )
                   (setq en (entlast)
                           pts (acet-ent-geomextents en)
                           PT (list (caar pts) (+ (cadr (cadr pts)) (- (cadr (cadr pts)) (cadr (car pts)))))
                   )              
             )
             (close f)
    )
    (progn
             ;;;;;;;;(alert "\n Chu y nhap khoang trang truoc va sau so thu tu cua cac dong can nhap")
(While (/= (setq ddl (getstring T "\n Nhap so thu tu cua dong du lieu muon nhap: ")) "" ) 
                       (setq dls (append dls (list ddl)))
             )
             (if dls 
             (progn         
             (setq f (open fn "r"))
             (while (setq S (read-line f))
                    (setq L (separate S ",")
                            STT (nth 1 L)
               	 Forder (nth 2 L)
                	TenCkien (nth 3 L)
                	TTCT (nth 6 L)
                	TenCT (nth 4 L)
               	 LoaiVL (nth 5 L)
               	 Day (nth 11 L)
                	Rong (nth 9 L)
                	Dai (nth 10 L)
               	 SlgCT (nth 8 L)
                	DVT (nth 7 L)
                	Gchu (nth 12 L)                 
         	      )
                   (if (member STT dls)
                       (command "insert" "Ghicaukien" PT "" "" "" 
                                      STT Forder TenCkien TTCT TenCT LoaiVL Day Rong Dai SlgCT DVT Gchu ) 
                   )
                   (setq en (entlast)
                           pts (acet-ent-geomextents en)
                           PT (list (caar pts) (+ (cadr (cadr pts)) (- (cadr (cadr pts)) (cadr (car pts)))))
                   )              
           )            
           (close f)
           )
           ) 
     )
)  

(command "undo" "e")

(princ)
)

 

Lisp 2:

(defun Separate (S sym / i L ch)
(setq i 0 L nil)
(while (      (setq i (1+ i) ch (substr S i 1))
     (if (= ch sym) (progn
(setq
      L (append L (list (substr S 1 (- i 1))))
      S (substr S (1+ i) (- (strlen S) i))
      i 0
)
     ))	
)
(append L (list S))
)
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
(defun c:nhapatt ( / fn f S L STT Forder TenCkien TTCT TenCT LoaiVL Day Rong Dai SlgCT 
                           DVT Gchu PT PT1 en pts)
(setq  fn (getfiled "Select Data File" "" "csv" 0)
       ;;;;;;;;;;;;;;; f (open fn "r")
)
;;;;(read-line f)

(command "undo" "be")
(setq PT (getpoint (getvar "lastpoint") "\n Chon diem nhap"))
(if (= (setq rep (strcase (getstring "\n Ban muon xuat het cac du lieu (y or n): "))) "Y")
   (progn
           (setq f (open fn "r"))
           (while (setq S (read-line f))
                    (setq L (separate S ",")
                            STT (nth 1 L)
               	 Forder (nth 2 L)
                	TenCkien (nth 3 L)
                	TTCT (nth 6 L)
                	TenCT (nth 4 L)
               	 LoaiVL (nth 5 L)
               	 Day (nth 11 L)
                	Rong (nth 9 L)
                	Dai (nth 10 L)
               	 SlgCT (nth 8 L)
                	DVT (nth 7 L)
                	Gchu (nth 12 L)                 
         	      )
;;;;;;;;;;(alert (strcat "\n Ten chi tiet là " TenCT))
;;;;;;;;;;(if (and (= (setq ans (strcase (getstring "\n Ban muon nhap chi tiet nay (y or n): "))) "Y") PT)
                   (Command "insert" "Ghicaukien" PT "" "" "" 
                                      STT Forder TenCkien TTCT TenCT LoaiVL Day Rong Dai SlgCT DVT Gchu )
                   (setq en (entlast)
                           pts (acet-ent-geomextents en)
                           PT (list (caar pts) (+ (cadr (cadr pts)) (- (cadr (cadr pts)) (cadr (car pts)))))
                   )              
             )
             (close f)
    )
    (progn
             (alert "\n Chu y nhap khoang trang truoc va sau so thu tu cua cac dong can nhap")
(If (/= (setq ddl (getstring T "\n Nhap so thu tu cua các dong du lieu muon nhap: ")) "" )  
             (progn         
             (setq f (open fn "r"))
             (while (setq S (read-line f))
                    (setq L (separate S ",")
                            STT (nth 1 L)
               	 Forder (nth 2 L)
                	TenCkien (nth 3 L)
                	TTCT (nth 6 L)
                	TenCT (nth 4 L)
               	 LoaiVL (nth 5 L)
               	 Day (nth 11 L)
                	Rong (nth 9 L)
                	Dai (nth 10 L)
               	 SlgCT (nth 8 L)
                	DVT (nth 7 L)
                	Gchu (nth 12 L)                 
         	      )
                   (if (wcmatch ddl (strcat "*" " " STT " " "*" ))
                       (command "insert" "Ghicaukien" PT "" "" "" 
                                      STT Forder TenCkien TTCT TenCT LoaiVL Day Rong Dai SlgCT DVT Gchu ) 
                   )
                   (setq en (entlast)
                           pts (acet-ent-geomextents en)
                           PT (list (caar pts) (+ (cadr (cadr pts)) (- (cadr (cadr pts)) (cadr (car pts)))))
                   )              
           )            
           (close f)
           )
           ) 
     )
)  

(command "undo" "e")

(princ)
)

 

Xin chân thành cám ơn các bác.

  • 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
Em thấy cái này hay hơn cái ex2cad, ah bác bình chỉnh sửa hộ em có thể suất các sheet của em sang cad được không ạ. Cám ơn bác

http://www.cadviet.com/upfiles/3/liet_ke_tu_dien_tong.rar

Chào bạn Duyhung,

Cái lisp mình viết cho bác Gia cát Manhhungxda là dựa trên cái file của bác ấy. Nó đã được tổ chức tương đối thuận lợi, cái block thuộc tính Ghicaukien đã được bác ấy làm nghiêm chỉnh rồi. Do vậy với bản vẽ của bạn việc chuyển các số liệu từ excel vào cad không khó nếu như bạn cũng có các block thuộc tính tương tự bạn ạ. Khi đó chỉ cần dùng cái lisp này chỉnh sửa chút xíu lá Ok.

Trong trường hợp bạn chưa có block thuộc tính như của bác Manhhungxda thì việc xuất dữ liệu vào CAD sẽ hơi rắc rối hơn do việc định dạng các Text của bạn. Nó không đồng nhất nhau về số ký tự nên cái bảng có thể sẽ rất xấu chứ không giống như Êxcel được vì lisp sẽ khá khó kiểm soát các số ký tự này.

Vì thế bạn nên sắp xếp lại các text cần thể hiện sao cho gọn gàn và tương đối chuẩn mực thì việc xuất dữ liệu vào Cad mới đẹp được bạn ạ.

 

Nhìn chung việc xuất dữ liệu từ bảng Excel vào Cad thông qua file text trung gian *.csv là không quá khó. Chỉ có điều là nó có đẹp hay không là do việc bố trí các text này trong êxcel sao cho hợp lý là được bạn ạ. Cách tốt nhất là không nên sử dụng mã tiếng Việt trong trường hợp này bạn ạ vì lisp không dịch được font tiếng Việt đâu. Nó chỉ làm nhiệm vụ chuyển nội dung text qua chứ không kiểm soát được các mã font. Vì thế có nhiều trường hợp sẽ không đọc được font tiếng việt nhất là khi font dùng trong Excel khác với font trong CAD.

  • 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âng cám ơn bác, nếu lisp không kiểm xoát đựơc việc đọc tiếng việt thì để em tìm cách khác ! Hj

 

Bạn Duyhung thân mến !

Không phải lisp không kiểm soát được tiếng việt mà cái file csv không chứa được Tiếng việt unicode.

Bạn nên sử dụng mã TCVN3 trên excel để xuất qua csv, còn trong cad>2007, vấn đề mã font không quan trọng nữa. Mình có thể nhúng bộ chuyển mã trong lisp hoặc sử dụng tool convert để chuyển mã trên cad .

 

Bác Bình ơi, đẹp xấu có thể xử lý trên lisp được mà bác, bạn dunghung không muốn tạo block thì mình có thể xuất ra dạng text+line mà.

Để mình làm cái lsp bạn duyhung xem thử có hợp ý bạn k 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
Vâng cám ơn bác, nếu lisp không kiểm xoát đựơc việc đọc tiếng việt thì để em tìm cách khác ! Hj

 

Ví dụ lisp dưới đây thực hiện công việc xuất file csv ra cad. giả sử xuất 5 cột đầu tiên trong chuỗi dữ liệu (row).

Giả định chiều cao chữ 2, khoảng cách dòng 5 và bề rộng các cột : 10 60 20 20 40.

Bạn duyhung có thể thêm mắm thêm muối cho màu text, font. ....theo ý mình.

Bạn cũng có thể sưa lại hàm text->cad để nó không chỉ xuất 5 cột mà xuất hết tất cả các cột trong có trong 1 row.

Bạn có thể cho lisp tự xác định bề rộng max của mỗi cột theo cách:

 

Chuyển dữ liệu lst từ:

 

(t11 t12 t13....)

(t21 t22 t23....)

(t31 t32 t33....)

(t41 t42 t43....)

....

Thành

(t11 t21 t31 t41...)

(t12 t22 t32 t42...)

(t13 t23 t33 t43...)

....

tij: i = hang, j = cot

 

Sau đó lấy max trong mỗi dòng trên bạn sẽ có được 1 danh sách chứa bề rộng cột.

 

Lưu ý: dùng mã TCVN3 cho excel nhé.

;Lisp by nPham. www.cadviet.com
(defun csv->list (fn / str f lst)  
(defun Separate (str sym / lst pos  )
	(setq Lst (append))
	(while  (setq pos (vl-string-search sym str))
   		(setq Lst (append Lst (list (substr str 1 pos))))
			(setq str (substr str (+ pos 2)))
	  ) Lst)

(setq f (open fn "r"))
(setq lst (append))
(read-line f)
(while (setq str (read-line f)) (setq lst (append lst (list (Separate str ",")))))
(close f)
lst
)


(defun text->cad (pt1 cnt tlst / pt1 pt2)
	  ;10 60 20 20 40
   (setvar "CECOLOR" "BYLAYER") 
   (command ".text" "J" "MC" (list (+ (car pt1) 5)  (- (- (cadr pt1) (* 5 cnt)) 2.5)) "2" "0" (nth 0 tlst))
   (command ".text" "J" "ML" (list (+ (car pt1) 12)  (- (- (cadr pt1) (* 5 cnt)) 2.5)) "2" "0" (nth 1 tlst))
   (command ".text" "J" "MC" (list (+ (car pt1) 80) (- (- (cadr pt1) (* 5 cnt)) 2.5)) "2" "0" (nth 2 tlst))
	 (command ".text" "J" "MC" (list (+ (car pt1) 100) (- (- (cadr pt1) (* 5 cnt)) 2.5)) "2" "0" (nth 3 tlst))
	   (command ".text" "J" "MC" (list (+ (car pt1) 130) (- (- (cadr pt1) (* 5 cnt)) 2.5)) "2" "0" (nth 4 tlst))

   (setvar "CECOLOR" "8")
   (command ".line" (setq pt2 (list (car pt1) (- (nth 1 pt1) (* 5 (+ cnt 1))))) (polar pt2 0 150) "")

)

(defun c:csv (/ fn f lst wlst i x col pt tile) 

(setq  fn (getfiled "Select Data File" "" "csv" 0))
(if fn
(if (setq pt (getpoint "\nDiem chen :"))
(progn
(setq f (open fn "r"))
(setq tile (read-line f))
(close f)
(setq lst (vl-remove-if  '(lambda (x) (apply 'and (mapcar '(lambda (y) (= y "")) x)))(csv->list fn)))

(command ".text" "J" "MC" (list (+ (car pt) 75) (+ (cadr pt) 8)) "4" "0" tile)
(setvar "CECOLOR" "7")
(command ".line" pt (polar pt 0 150) "")
(setq row 0)
(mapcar '(lambda (x)	   	   
   	(setq row (+ row 1))
	  (text->cad pt (- row 1) x))
	lst
)
(setvar "cecolor" "7")
  (command "line" pt (polar pt (- (/ pi 2)) (* row 5)) "")  
  (command ".copy" (entlast) "" pt (polar pt 0 10))  
  (command ".copy" (entlast) "" pt (polar pt 0 60))  
(command ".copy" (entlast) "" pt (polar pt 0 20))
  (command ".copy" (entlast) "" pt (polar pt 0 20))  
  (command ".copy" (entlast) "" pt (polar pt 0 40))	

)))
 )

  • 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

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

×