Đến nội dung


Hình ảnh
* * * - - 2 Bình chọn

AutoCAD với Excel


  • Please log in to reply
199 replies to this topic

#101 thiep

thiep

    biết dimbaseline

  • Members
  • PipPipPipPipPip
  • 369 Bài viết
Điểm đánh giá: 260 (khá)

Đã gửi 27 April 2008 - 08:07 PM

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ẽ)
  • 0

#102 crazylisp

crazylisp

    biết vẽ line

  • CADViet Team
  • PipPip
  • 20 Bài viết
Điểm đánh giá: 14 (tàm tạm)

Đã gửi 27 April 2008 - 09:17 PM

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.lookinggl...tableimport.htm

ha ha ha!
  • 0

#103 crazylisp

crazylisp

    biết vẽ line

  • CADViet Team
  • PipPip
  • 20 Bài viết
Điểm đánh giá: 14 (tàm tạm)

Đã gửi 27 April 2008 - 10:04 PM

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 1
RongCot 2
)
(defun StrExp (Str / ListStr)
(defun StrPos (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
)
)
(if (not (StrPos "," Str))
(setq Str (Strcat Str ","))
)
(while (StrPos "," Str)
(setq
ListStr (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)
SoCot
CaoHang
RongCot
)
)
(vla-setText CTBL 0 0 "Crazylisp table")
(setq x 0)
(foreach Hang Data
(setq y 0
x (+ x 1)
)
(foreach Cell Hang
(vla-setText CTBL x y Cell)
(setq y (+ y 1))
)
)
(princ)
)
;;;***************************


  • 5

#104 phantuhuong

phantuhuong

    biết dimstyle

  • Moderator
  • PipPipPipPipPip
  • 383 Bài viết
Điểm đánh giá: 200 (khá)

Đã gửi 01 May 2008 - 02:04 PM

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.c...uyen_Object.jpg
  • 2
Bồi dưỡng Excel & VBA cho các đơn vị ở Hà Nội và khu vực lân cận

Từng bước loại đồ Tàu ra khỏi cuộc sống!


#105 ssg

ssg

    biết lệnh adcenter

  • Vip
  • PipPipPipPipPipPipPip
  • 1228 Bài viết
Điểm đánh giá: 1087 (rất tốt)

Đã gửi 03 May 2008 - 04:46 PM

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.
  • 0

#106 votinh66

votinh66

    biết pan

  • Members
  • Pip
  • 6 Bài viết
Điểm đánh giá: 0 (bình thường)

Đã gửi 26 August 2008 - 10:56 PM

cam on cac bac
  • 0

#107 votinh66

votinh66

    biết pan

  • Members
  • Pip
  • 6 Bài viết
Điểm đánh giá: 0 (bình thường)

Đã gửi 26 August 2008 - 11:05 PM

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.c...itiespart1.rar" target="_blank"><a href="http://www.cadviet.c...itiespart1.rar" target="_blank">http://www.cadviet.com/upfiles/ACAD_Utilitiespart1.rar</a></a>
<a href="http://www.cadviet.c...iespart2_1.rar" target="_blank"><a href="http://www.cadviet.c...iespart2_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?
  • 0

#108 congtrong2008

congtrong2008

    biết pan

  • Members
  • Pip
  • 9 Bài viết
Điểm đánh giá: 0 (bình thường)

Đã gửi 30 September 2008 - 05:29 PM

[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
  • 0

#109 meohoang

meohoang

    biết lệnh adcenter

  • Members
  • PipPipPipPipPipPipPip
  • 811 Bài viết
Điểm đánh giá: 342 (khá)

Đã gửi 30 September 2008 - 06:01 PM

[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
  • 0

#110 nhocbabi

nhocbabi

    biết vẽ rectang

  • Members
  • PipPip
  • 83 Bài viết
Điểm đánh giá: -3 (bình thường)

Đã gửi 09 December 2008 - 10:33 AM

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.
  • 0

#111 huycad

huycad

    Chưa sử dụng CAD

  • Members
  • Pip
  • 3 Bài viết
Điểm đánh giá: 0 (bình thường)

Đã gửi 10 December 2008 - 10:22 AM

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.co...rt_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.


  • 0

#112 nataca

nataca

    biết lệnh adcenter

  • Members
  • PipPipPipPipPipPipPip
  • 712 Bài viết
Điểm đánh giá: 553 (tốt)

Đã gửi 05 January 2009 - 01:41 PM

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.co...rt_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 ^_^
  • 0

#113 detective

detective

    biết pan

  • Members
  • Pip
  • 5 Bài viết
Điểm đánh giá: 0 (bình thường)

Đã gửi 20 January 2009 - 04:15 PM

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!)
  • 0

#114 detective

detective

    biết pan

  • Members
  • Pip
  • 5 Bài viết
Điểm đánh giá: 0 (bình thường)

Đã gửi 20 January 2009 - 04:30 PM

Để 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?
  • 0

#115 tuananhcmd

tuananhcmd

    biết zoom

  • Members
  • Pip
  • 10 Bài viết
Điểm đánh giá: 0 (bình thường)

Đã gửi 05 February 2009 - 02:38 PM

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?
  • 0

#116 Nguyen Hoanh

Nguyen Hoanh

    biết lệnh adcenter

  • Moderator
  • PipPipPipPipPipPipPip
  • 4106 Bài viết
Điểm đánh giá: 4495 (đỉnh cao)

Đã gửi 05 February 2009 - 03:10 PM

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: ??? ???? ????? ??? ?? ???
  • 0

#117 pccc

pccc

    biết lệnh adcenter

  • Members
  • PipPipPipPipPipPipPip
  • 871 Bài viết
Điểm đánh giá: 253 (khá)

Đã gửi 05 February 2009 - 03:41 PM

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ọ
  • 0
Vừa tàn mùa xuân rồi tàn mùa hạ
Một ngày đầu thu ..................................
gặp Mũn........................

#118 phamthanhbinh

phamthanhbinh

    biết lệnh adcenter

  • Moderator
  • PipPipPipPipPipPipPip
  • 6009 Bài viết
Điểm đánh giá: 3113 (tuyệt vời)

Đã gửi 05 February 2009 - 06:48 PM

Độ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ọ.
  • 0
Chúc các quý Anh trên diễn đàn luôn khỏe, đẻ thêm được nhiều thứ để mót.

#119 phamthanhbinh

phamthanhbinh

    biết lệnh adcenter

  • Moderator
  • PipPipPipPipPipPipPip
  • 6009 Bài viết
Điểm đánh giá: 3113 (tuyệt vời)

Đã gửi 05 February 2009 - 06:54 PM

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.
  • 0
Chúc các quý Anh trên diễn đàn luôn khỏe, đẻ thêm được nhiều thứ để mót.

#120 haiduong2105

haiduong2105

    biết zoom

  • Members
  • Pip
  • 15 Bài viết
Điểm đánh giá: 1 (bình thường)

Đã gửi 14 February 2009 - 12:24 AM

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.c...s/LISPexCEL.xls
  • 0