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

AutoCAD với Excel

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

xin các anh em thử làm một cái lisp: đưa dữ liệu từ bảng excel đuôi .cvs vào bảng table của acad2007 (ví dụ khung tên của bảng vẽ)

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 các anh em thử làm một cái lisp: đưa dữ liệu từ bảng excel đuôi .cvs vào bảng table của acad2007 (ví dụ khung tên của bảng vẽ)

cái này 30$ bạn ạ, bạn mua ở đây:

http://www.lookingglassmicro.com/tableimport.htm

 

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

Cái này của tôi chức năng không hề kém, nhưng free. Tiết kiếm cho bạn 30$ rồi nhé!
bạn sử dụng lệnh CsvToCad:

;;;***************************;;; CsvToCAD - free software, written by Crazylisp.(vl-load-com)(setq CaoHang 1RongCot 2)(defun StrExp (Str / ListStr)(defun StrPos (sub st / l1 l2 index)(setq index 1l1 (Strlen sub)l2 (Strlen st))(while(and (<= (+ index l1 -1) l2) (/= sub (subStr st index l1)))(setq index (1+ index)))(if (= sub (subStr st index l1))indexnil))(if (not (StrPos "," Str))(setq Str (Strcat Str ",")))(while (StrPos "," Str)(setqListStr (append ListStr(list (subStr Str 1 (1- (StrPos "," Str)))))Str (subStr Str (1+ (StrPos "," Str)))))(setq ListStr (append ListStr (list Str))))(defun c:CsvToCad(/ cdata data)(setq filecsv (getfiled "file CSV: " "" "CSV" 0)f (open filecsv "r")SoCot 0)(while (setq Str (read-line f))(setq cdata (StrExp Str)SoCot (max SoCot (length cdata))data (append data (list cdata))))(setq SoHang (length data))(close f)(setq CTBL (vla-AddTable(vla-get-modelspace(vla-get-activedocument (vlax-get-acad-object)))(vlax-3d-point (getpoint "\ndiem chen bang: "))(+ 1 SoHang)SoCotCaoHangRongCot))(vla-setText CTBL 0 0 "Crazylisp table")(setq x 0)(foreach Hang Data(setq y 0x (+ x 1))(foreach Cell Hang(vla-setText CTBL x y Cell)(setq y (+ y 1))))(princ));;;***************************
  • Vote tăng 5

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 có vài góp ý sau:

 

1) Nội dung cụ thể bạn làm mình không quan tâm vì nó chẳng phải chuyên ngành của mình. Ngoài ra, các chương trình VB nói chung có một nhược điểm chí mạng: phụ thuộc quá nhiều vào cái đám Libraries -> phụ thuộc vào version của Excel, VB lẫn Acad. Điều đó có nghĩa là, cái bạn làm chạy rất tốt trên máy bạn nhưng khi share cho ai đó thì chưa chắc họ dùng được. Ví dụ, bản thân mình muốn thử chương trình của bạn cũng phải vào Tools - References khai báo lại AutoCAD Type Library. Nếu không, chương trình cứ báo error!

Chính vì thế, đã từ lâu mình không có hứng thú lập trình bằng VB nữa mà chuyển sang "chơi" với Lisp.

Nếu bạn có ý phát triển theo hướng này thì nên chú ý đến vấn đề Version và Libraries

 

Cái đo đỏ đã khắc phục được rồi. Chuyển đối tượng sang Object hết là được (từ liên kết sớm chuyển sang liên kết muộn), kể cả VBA Excel và Cad đều Ok.

 

Kinh nghiệm của tôi là cứ thực hiện trên liên kết sớm để có được sự trợ giúp, khi ổn chuyển sang liên kết muộn.

 

http://www.cadviet.com/upfiles/Chuyen_Object.jpg

  • 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
Cái đo đỏ đã khắc phục được rồi. Chuyển đối tượng sang Object hết là được (từ liên kết sớm chuyển sang liên kết muộn), kể cả VBA Excel và Cad đều Ok.

Kinh nghiệm của tôi là cứ thực hiện trên liên kết sớm để có được sự trợ giúp, khi ổn chuyển sang liên kết muộn.

Anh PhanTuHuong có thể diễn giải rõ hơn chỗ đánh dấu đỏ trên không?

Cám ơn 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
Mình có chương trình này, có thể truy xuất dữ liệu qua lại giữa CAD và Excel rất dễ dàng.

 

Chương trình có 3 chức năng chính (viết bằng VB6.0 nên hơi lớn - 4MB và chỉ sử dụng cho 2004/5 thôi, sẽ có bản mới sau)

 

1. Lấy dữ liệu của đối tượng:

- dùng đế lấy toạ độ, nội dung của các đối tượng và xuất qua bảng tính excel

Nếu có nhiều loại đối tượng thì mỗi loại sẽ nằm trong một sheet

Đối với Text, MText --> dữ liệu xuất sẽ là X,Y,Z, Nội dung

Đối với Line --> X1,Y1,Z1 và X2,Y2,Z2

Đối với Poly--> Các điểm X,Y,Z liên tiếp nhau trên từng hàng của Excel

Đối với SPline-->Các điểm X,Y,Z liên tiếp nhau trên từng hàng của Excel và cả Fitpoints

 

2. Tạo đối tượng

a. Từ Excel bạn quét khối toàn bộ các dữ liệu X,Y,Z và Nội dung (nếu có trong trường hợp dùng cho Text,MText)

b. Chọn kiểu đối tượng cần tạo VD: Polyline chẳng hạn

c. Trong chương trình bạn nhấn nút Tạo để tạo đối tượng

Trường hợp này 1 polyline sẽ được tạo ra từ các toạ độ X,Y,Z đã quét khối ở trên

 

3. Thay đổi dữ liệu theo công thức

Chọn đối tượng và sử dụng các công thức của Excel để thay đổi cho X,Y,Z và nội dung (nếu có)

 

VD1: Thay đổi các điểm trong tập điểm

Trong tập điểm, nếu các điểm có cao độ thấp hơn 200m thì nâng thêm 5m

Trong mục Lọc chọn Point (or Text...), phía dưới trong mục Z gõ: =if(Z<=200,Z+5,Z)

 

VD2: để thay đổi nội dung của Text bằng chính cao độ của nó

Trong mục Lọc chọn Text, phía dưới trong mục Nội dung bạn gõ: vào =Z

 

VD3: để thay đổi nội dung của Text bằng chính các tọa độ của nó và nằm trên 3 hàng

Trong mục Lọc chọn Text, phía dưới trong mục Nội dung bạn gõ vào =X & "\P" & Y & "\P" & Z

 

Link: <a href="http://www.cadviet.com/upfiles/ACAD_Utilitiespart1.rar" target="_blank"><a href="http://www.cadviet.com/upfiles/ACAD_Utilitiespart1.rar" target="_blank">http://www.cadviet.com/upfiles/ACAD_Utilitiespart1.rar</a></a>

<a href="http://www.cadviet.com/upfiles/ACAD_Utilitiespart2_1.rar" target="_blank"><a href="http://www.cadviet.com/upfiles/ACAD_Utilitiespart2_1.rar" target="_blank">http://www.cadviet.com/upfiles/ACAD_Utilitiespart2_1.rar</a></a>

mã anhcos-270773-723472

Cho e hỏi sử dụng phần mềm này ntn?

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 cũng đang dùng cad 2007 và 2008 vậy bác có thể nói rõ hơn cách liên kết giữa cad và excell được không

Liên kết giữa Cad2008 và Excel khá hoàn chỉnh bạn tính toán mọi thứ trên Excel chiển qua cad sẽ thây kết quả tính tự động cập nhật 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
Tại trang tin cũng đã có 1 ví dụ về chương trình LISP nhập xuất dữ liệu giữa AutoCAD và Excel.

http://www.cadviet.com/content/view/20/1/

 

Đó là chương trình eiPoint (Export Import Point), là chương trình khá đơn giản và cơ bản. Chúng ta có thể cải tiến nó để đáp ứng được từng mục đích riêng của mình.

 

Dưới đây là mã lệnh của chương trình eiPoint (lấy từ trang tin):

(defun c:exppnt	(/ fn fid i sdt tp ent p x y z)
 (princ "\neiPoint © 2007 Cadviet.com")
 (setq
   ssp	(ssget '((0 . "POINT")))
   fn	(getfiled "Ten tep de xuat toa do x y z"
	  (getvar "dwgprefix")
	  "txt"
	  1
)
   i	0
   sdt	(cond (ssp (sslength ssp))
      (t 0)
)
   tp	nil
   fid	(open fn "w")
 )

 (repeat sdt
   (setq ent (ssname ssp i)
  i   (1+ i)
  p   (cdr (assoc 10 (entget ent)))
  x   (car p)
  y   (cadr p)
  z   (caddr p)
   )
   (princ (strcat (rtos x) "\t" (rtos y) "\t" (rtos z) "\n")
   fid
   )
 )
 (close fid)
 (princ)
)

(defun c:imppnt	( / fn fid strht vt x y z)
 (defun pos (sub st / l1 l2 index)
   (setq index	1
  l1	(strlen sub)
  l2	(strlen st)
   )
   (while
     (and (<= (+ index l1 -1) l2) (/= sub (substr st index l1)))
      (setq index (1+ index))
   )
   (if	(= sub (substr st index l1))
     index
     nil
   )
 )
 (princ "\neiPoint © 2007 Cadviet.com")
 (setq	fn  (getfiled "Ten tep de nhap toa do x y z"
	      (getvar "dwgprefix")
	      "txt"
	      2
    )
fid (open fn "r")

 )
 (while (setq strht (read-line fid))
   (setq strht (strcat strht "\t\t\t"))
   (if	(/= strht "   ")
     (progn
(setq
  vt	(pos "\t" strht)
  x	(atof (substr strht 1 (1- vt)))
  strht	(substr strht (1+ vt))
  vt	(pos "\t" strht)
  y	(atof (substr strht 1 (1- vt)))
  strht	(substr strht (1+ vt))
  vt	(pos "\t" strht)
  z	(atof (substr strht 1 (1- vt)))
)
(entmake (list
	   (cons 0 "POINT")
	   (list 10 x y z)
	 )
)
     )
   )
 )
 (close fid)
)
(princ "\neiPoint da duoc nap. su dung 2 lenh: ExpPnt va ImpPnt de xuat va nhap Point")

 

Bản chất của quá trình trao đổi dữ liệu giữa AutoCAD và Excel trong ví dụ trên là tạo ra một tệp có đuôi .txt làm trung gian.

Bác Hoành ơi, bác có thể nói rõ hơn về cách thức sử dụng lisp này được không, nghĩa là lợi ích khi sử dụng và thao tác lệnh ấy.

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

Việc xuất và nhập dữ liệu tọa độ với point dùng LISP này thì quá OK rồi. Nhưng nếu mình muốn xuất tọa độ của điểm trong đối tượng (entity) thì sao ?

Chẳng hạng xuất tọa độ các điểm của 1 pline.

Mình biết một chương trình làm được cái này, nhưng giá 30$ :cheers:

http://www.sycode.com/products/points_export_ac/index.htm

Liệu có LISP thay thế không nhỉ. Các bác chỉ giáo

 

Tại trang tin cũng đã có 1 ví dụ về chương trình LISP nhập xuất dữ liệu giữa AutoCAD và Excel.

http://www.cadviet.com/content/view/20/1/

 

Đó là chương trình eiPoint (Export Import Point), là chương trình khá đơn giản và cơ bản. Chúng ta có thể cải tiến nó để đáp ứng được từng mục đích riêng của mình.

 

Dưới đây là mã lệnh của chương trình eiPoint (lấy từ trang tin):

(defun c:exppnt	(/ fn fid i sdt tp ent p x y z)
 (princ "\neiPoint © 2007 Cadviet.com")
 (setq
   ssp	(ssget '((0 . "POINT")))
   fn	(getfiled "Ten tep de xuat toa do x y z"
	  (getvar "dwgprefix")
	  "txt"
	  1
)
   i	0
   sdt	(cond (ssp (sslength ssp))
      (t 0)
)
   tp	nil
   fid	(open fn "w")
 )

 (repeat sdt
   (setq ent (ssname ssp i)
  i   (1+ i)
  p   (cdr (assoc 10 (entget ent)))
  x   (car p)
  y   (cadr p)
  z   (caddr p)
   )
   (princ (strcat (rtos x) "\t" (rtos y) "\t" (rtos z) "\n")
   fid
   )
 )
 (close fid)
 (princ)
)

(defun c:imppnt	( / fn fid strht vt x y z)
 (defun pos (sub st / l1 l2 index)
   (setq index	1
  l1	(strlen sub)
  l2	(strlen st)
   )
   (while
     (and (<= (+ index l1 -1) l2) (/= sub (substr st index l1)))
      (setq index (1+ index))
   )
   (if	(= sub (substr st index l1))
     index
     nil
   )
 )
 (princ "\neiPoint © 2007 Cadviet.com")
 (setq	fn  (getfiled "Ten tep de nhap toa do x y z"
	      (getvar "dwgprefix")
	      "txt"
	      2
    )
fid (open fn "r")

 )
 (while (setq strht (read-line fid))
   (setq strht (strcat strht "\t\t\t"))
   (if	(/= strht "   ")
     (progn
(setq
  vt	(pos "\t" strht)
  x	(atof (substr strht 1 (1- vt)))
  strht	(substr strht (1+ vt))
  vt	(pos "\t" strht)
  y	(atof (substr strht 1 (1- vt)))
  strht	(substr strht (1+ vt))
  vt	(pos "\t" strht)
  z	(atof (substr strht 1 (1- vt)))
)
(entmake (list
	   (cons 0 "POINT")
	   (list 10 x y z)
	 )
)
     )
   )
 )
 (close fid)
)
(princ "\neiPoint da duoc nap. su dung 2 lenh: ExpPnt va ImpPnt de xuat va nhap Point")

 

Bản chất của quá trình trao đổi dữ liệu giữa AutoCAD và Excel trong ví dụ trên là tạo ra một tệp có đuôi .txt làm trung gian.

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
Việc xuất và nhập dữ liệu tọa độ với point dùng LISP này thì quá OK rồi. Nhưng nếu mình muốn xuất tọa độ của điểm trong đối tượng (entity) thì sao ?

Chẳng hạng xuất tọa độ các điểm của 1 pline.

Mình biết một chương trình làm được cái này, nhưng giá 30$ :D

http://www.sycode.com/products/points_export_ac/index.htm

Liệu có LISP thay thế không nhỉ. Các bác chỉ giáo

Oài!!! 30$ cơ à. Thế mà trên diễn đàn này có rồi đấy. Bạn mất công tìm một chút là thấy được 30$ ngay ^_^

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 Hoành ơi, Em ko rành về lisp lắm nên ko biêt sửa lisp thế nào. bác có thể cho em xin lisp lấy Xuất riêng hoành độ hoặc tung độ giao điểm của 2 layer khác nhau ko? và 1 lisp nhập các toạ độ đó vào để vẽ đương spl qua chung trong hệ toạ độ mới. (em co hình chiếu cạnh của 3 layer . Em muốn vẽ hcd và hcb của nó). 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
Để làm gì hả bạn?

Bản vẽ của em có 3 layer cắt nhau trên hình chiếu cạnh xuất ra Excel sau đó nhập vào cad để vẽ spl trên hcd và hcb qua chúng ở một hệ toạ độ khác. co Lisp để chỉnh trơn nó ko 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
ai có thể biến dòng dưới này về binh thường cho tôi không

 

: Ð?i 3 M? - Xóm M? Lau - X. Yên Son - H. Thanh Son - Phú Th?

Chẳng ai chuyển được đâu.

 

giống như nhờ bạn dịch giúp tôi đoạn sau ra tiếng Việt: ??? ???? ????? ??? ?? ???

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
ai có thể biến dòng dưới này về binh thường cho tôi không

 

: Ð?i 3 M? - Xóm M? Lau - X. Yên Son - H. Thanh Son - Phú Th?

 

Đội 3 Mô - Xóm Mô Lau - Xã Yên Sơn - Huyện Thanh Sơn - Phú Thọ

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
Đội 3 Mô - Xóm Mô Lau - Xã Yên Sơn - Huyện Thanh Sơn - Phú Thọ

Hì ,

không phải rồi:

Đồi 3 Mộ, xóm Mộ lậu, xã Yên Sơn, huyện Thanh Sơn , Tỉnh Phú thọ.

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
ai có thể biến dòng dưới này về binh thường cho tôi không

 

: Ð?i 3 M? - Xóm M? Lau - X. Yên Son - H. Thanh Son - Phú Th?

Bạn nên vào bản vẽ gốc rồi truy tìm font của đoạn Text trên. Sau đó tìm các nhập font đó về máy của bạn may ra dịch được bạn ạ.

Có thể dùng lệnh lisp sau để truy tìm font gốc của đoạn text: (entget (car (entsel))) rồi click vào đoạn text sẽ thu được các mã DXF của đoạn text đó. Trong đó mã dxf nhóm 7 là font gốc của đoạn text.

Chúc bạn 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
Chào các bác

Em có một file excel có dạng lisp muốn nhờ các bác giúp đỡ lấp một nút lệnh khí tích voà đó tự động load vao acad (giống như load file.lsp)

 

đây là file mẫu: http://www.cadviet.com/upfiles/LISPexCEL.xls

Sub sau sẽ tự động load những lisp trong Selection vào bản vẽ acad đang mở

Private Sub CommandButton1_Click()
 Dim acad As AcadApplication, doc As AcadDocument
 Dim s$,  cell
 Set acad = GetObject(, "AutoCAD.Application")

 If Err <> 0 Then
  Exit Sub
 End If

 acad.Visible = True
 Set doc = acad.ActiveDocument
 For Each cell In Selection.Cells
s = cell.Value & vbCr
doc.SendCommand (s)
 Next
End Sub

-Tham khảo trong các bài khác cách tham chiếu lại thư viện hoặc muốn tự động mở acad

-Các dòng lisp trong file excel bị lỗi vì các dấu chấm bị đổi thành dấu phẩy nên không chạy được

VD

(command "text" "j" "M" "104,65,0" "0" "1.S") .. (command "Rectang" "100,-4,5" "109,3,4,5")

Phải sửa lại là

(command "text" "j" "M" "104.65,0" "0" "1.S") .. (command "Rectang" "100,-4.5" "109.3,4.5")

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
Sub sau sẽ tự động load những lisp trong Selection vào bản vẽ acad đang mở

Private Sub CommandButton1_Click()
 Dim acad As AcadApplication, doc As AcadDocument
 Dim s$,  cell
 Set acad = GetObject(, "AutoCAD.Application")

 If Err <> 0 Then
  Exit Sub
 End If

 acad.Visible = True
 Set doc = acad.ActiveDocument
 For Each cell In Selection.Cells
s = cell.Value & vbCr
doc.SendCommand (s)
 Next
End Sub

-Tham khảo trong các bài khác cách tham chiếu lại thư viện hoặc muốn tự động mở acad

-Các dòng lisp trong file excel bị lỗi vì các dấu chấm bị đổi thành dấu phẩy nên không chạy được

VD

 

Phải sửa lại là

 

Chào bạn mình chậy thử rồi không được nó báo nỗi bạn ạ, cái dòng mình tô đậm

 

Private Sub CommandButton1_Click()

Dim acad As AcadApplication, doc As AcadDocument

Dim s$, cell

Set acad = GetObject(, "AutoCAD.Application")

 

If Err <> 0 Then

Exit Sub

End If

 

acad.Visible = True

Set doc = acad.ActiveDocument

For Each cell In Selection.Cells

s = cell.Value & vbCr

doc.SendCommand (s)

Next

End Sub

 

cái bảng mình gửi trước mình để định dạng nhầm dấu . thành , (vì lúc đó mình làm dự toán)

 

mình up lại file nhờ bạn xem giúp.

bạn có thể giúp mình chỉnh lại giúp mình theo kiểu đọc từng cột 1 xuất sang cad (đọc hết cột A khi dòng lệnh = trống thì chuyên sang đọc cột B , cột C, cột D)

và điều kiển từ sheet khác. (cho phép chon nua ten sheet trong bảng)

cám ơn bạn 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ái này dùng cho Cad2004 được ko đấy bác. Dùng là báo lỗi àh.

diem chen bang: ; error: no function definition: VLA-ADDTABLE

Cad2004 chưa hổ trợ Bảng(Table) -> không có hàm VLA-ADDTABLE .

Các version 2006 trở lên thì 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 bạn mình chậy thử rồi không được nó báo nỗi bạn ạ, cái dòng mình tô đậm

 

Private Sub CommandButton1_Click()

Dim acad As AcadApplication, doc As AcadDocument

Dim s$, cell

...

cái bảng mình gửi trước mình để định dạng nhầm dấu . thành , (vì lúc đó mình làm dự toán)

 

mình up lại file nhờ bạn xem giúp.

bạn có thể giúp mình chỉnh lại giúp mình theo kiểu đọc từng cột 1 xuất sang cad (đọc hết cột A khi dòng lệnh = trống thì chuyên sang đọc cột B , cột C, cột D)

và điều kiển từ sheet khác. (cho phép chon nua ten sheet trong bảng)

cám ơn bạn nhiều

Phải khai lại thư viện

Trong cửa sổ VBA vào menu Tool->Rerences.. hiện lên dialog

Check vào Autocad 200x Type Library

Up lại file chỗ nà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
Phải khai lại thư viện

Trong cửa sổ VBA vào menu Tool->Rerences.. hiện lên dialog

Check vào Autocad 200x Type Library

Up lại file chỗ nào?

Mình đã khai như bạn hướng đan như khi chậy nó lại nên cái heip của cad

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


×