Chuyển đến nội dung
Diễn đàn CADViet
  • Thông báo

    • Nguyen Hoanh

      CADViet đã hoàn tất nâng cấp   14/09/2017

      Chào các bạn, CADViet đã hoàn tất việc nâng cấp lên phiên bản mới. Tất cả các chức năng đã hoạt động theo kỳ vọng của ban quản trị. Nếu có vấn đề gì cần phản hồi, các bản post ở đây nhé: Trân trọng, Nguyễn Hoành.
emhn

AutoCAD với Excel

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

Chương trình xuất dữ liệu từ Excel sang Cad cuả Bác Ssg thật tuyệt, dân trắc địa gặp phải cái này thì ưng ý lắm, xin đề xuất thêm vơí Bác Ssg là trong dữ liệu cuả Excel, ngoaì pointname, X,Y,Z, còn có thêm cột "code" nữa, khi xuất qua Cad, dùng lệnh JD cuả Bác Hoành viết cho tnmtpc để nôí điểm theo code thì trên cả tuyệt vơì Bác ạ! Bác viết thêm một chút nữa nhé! Bà con trắc địa đang chờ đấy

Cái sườn đã có sẵn, thêm 1 hay nhiều cột nữa không thành vấn đề. Tuy nhiên, mình thấy quy cách trên bản vẽ do vbao và cuongcv3 đề xuất khác với bản vẽ của bạn.

Theo mình, các bạn nên thống nhất nhau trước, nêu yêu cầu tổng hợp và cụ thể hoá bằng các file:

- 1 file *.xls với đầy đủ các số liệu

- 1 file *.dwg sau khi chạy chương trì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
Chương trình xuất dữ liệu từ Excel sang Cad cuả Bác Ssg thật tuyệt, dân trắc địa gặp phải cái này thì ưng ý lắm, xin đề xuất thêm vơí Bác Ssg là trong dữ liệu cuả Excel, ngoaì pointname, X,Y,Z, còn có thêm cột "code" nữa, khi xuất qua Cad, dùng lệnh JD cuả Bác Hoành viết cho tnmtpc để nôí điểm theo code thì trên cả tuyệt vơì Bác ạ! Bác viết thêm một chút nữa nhé! Bà con trắc địa đang chờ đấy

 

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: http://www.cadviet.com/upfiles/ACAD_Utilitiespart1.rar

http://www.cadviet.com/upfiles/ACAD_Utilitiespart2_1.rar

mã anhcos-270773-723472

  • 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ác Bác có thể giúp mình một lisp xuất từ Excel sang Acad (trong excel có 03 hàng theo thứ tự : STT - toạ độ Y - toạ độ X) mình muốn xuất ra Acad rồi về đường line nối các điểm đó lại với nhau theo thư tự của các điểm. (mục đích muốn vẽ biểu đồ áp lực sau khi đã tính toán từ excel)

Cam ơn các Bác nhiều.

 

có rất nhiều phần mên

bạn thử làm, theo cách của mình xem

đó là chạy file *.scr

theo mình thì cách này đơn giản, và bạn chủ động hơn

Ví dụ của mình dây

+bạn thử copy cái cột mình bôi xanh vào dòng lệnh của cad xem có điều gì xay ra

+dùng lệnh SCR để chạy file HUNG.SCR

còn xuất từ cad sang excel thi mình cò file lisp

bản thử xem

http://www.cadviet.com/upfiles/scr.rar

VỚI CÁCH NÀY THÌ CÁC BẠN CÓ THỂ LÀM NHIỀU THƯ:

+vẼ đường điều phối đất

+Tính toán thuỷ năng

+Trắc địa

+.....

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

Cám ơn sự chia sẻ của bạn.

Mình có vài góp ý sau:

1) Là người dùng AutoCAD, cái người ta cần là sự đơn giản, rõ ràng và hiệu quả. Bạn đưa vào chương trình nhiều cái không thiết thực lắm. Nhiều thứ quá làm cho chương trình có vẻ rườm rà, có thể gây khó hiểu cho người dùng.

Cụ thể:

- Mình dám chắc rằng không có người dùng Acad, bất kể chuyên ngành nào, cần lấy dữ liệu từ Dimensions xuất ra Excel để làm gì cả!

- Tính năng "Thay đổi dữ liệu theo công thức" cũng không nên đưa vào. Nếu cần, người dùng sẽ tự xử lý, hoặc bằng AutoCAD hoặc bằng Excel hiệu quả hơn nhiều. Chương trình chỉ nên làm mỗi một chức năng Converter thuần tuý.

- Cùng quan điểm như trên, bạn cũng nên bỏ luôn tính năng nhân tỷ lệ khi tạo thực thể. Đối với chiều cao text, cách tốt nhất là lấy textheight hiện hành trên bản vẽ.

Rút gọn lại, giao diện chương trình chỉ cần đơn giản như sau:

- 1 Combo_box để chọn Objects Type

- 4 Command Button: Import, Export, Help và Exit

- Có thể thay 2 button Import, Export bằng 1 button Run và 1 cặp Option_Button (im và ex)

Đừng ngại rằng bỏ đi nhiều thứ sẽ làm cho chương trình có vẻ không "hoành tráng"! Thực tế, người dùng sẽ đánh giá rất cao các chương trình đơn giản, nhỏ gọn nhưng hiệu quả.

 

2) Bạn chưa xử lý runtime error. Khi người dùng không quét chọn dữ liệu trên bảng Excel mà bấm nút "Tạo", nó báo lỗi runtime và thoát ngang xương! Cách hành xử thông thường là ra thông báo nhắc nhở và hướng dẫn người dùng thao tác lại cho đúng.

 

3) Điều cuối cùng, và cũng là điều quan trọng nhất. Bạn có biết vì sao mọi người có vẻ không "mặn mà" lắm với VB không? Đó là yêu cầu về version của cả AutoCAD lẫn Excel. Cho dù bạn có bổ sung đầy đủ các version hiện nay đi nữa, trong tương lai AutoCAD ra thêm version 2009 hoặc MicroSoft có thêm Office2010 chẳng hạn, thì chương trình VB của bạn có còn tương thích không? Hay là họ buộc phải liên hệ với bạn để có được bản upgrade?

Bạn giải quyết được vấn đề này thì chắc chắn các ứng dụng VB sẽ phát huy được tối đa những ưu thế hiển nhiên của 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
Cái sườn đã có sẵn, thêm 1 hay nhiều cột nữa không thành vấn đề. Tuy nhiên, mình thấy quy cách trên bản vẽ do vbao và cuongcv3 đề xuất khác với bản vẽ của bạn.

Theo mình, các bạn nên thống nhất nhau trước, nêu yêu cầu tổng hợp và cụ thể hoá bằng các file:

- 1 file *.xls với đầy đủ các số liệu

- 1 file *.dwg sau khi chạy chương trình

Bác nói quá đúng!, mỗi anh mỗi khác, nhưng thực ra về cái gốc không thể khác nhau được. Bản vẽ Cad chứa dữ liệu không gian, còn bên Excel có thể hiểu là chứa dữ liệu thuộc tính. Dữ liệu có thể gồm nhiều thứ, nhưng không thể thiếu các thông tin cơ bản là tên điểm mia, tọa độ X,Y, độ cao Z, ghi chú điểm (có thể xem cái này là code cũng được nhưng tốt nhất nên cho một cột riêng). đôí vơí dân bản đồ địa chính(không quan tâm Z), code dùng nôí cạnh thửa, dân bản đồ địa hình, code dùng nôí các địa vật như đường giao thông, sông suôí...Như vậy code phaỉ được nhập vào ngay Excel để khi qua Cad tự động nôí điểm là quan trọng lắm chớ, còn cách thể hiện vị trí text cuả điểm mia (tên điểm, độ cao, ghi chú,...) tất nhiên có qui định nhưng không quan trọng. Chẳng qua bạn VBao, Cuongcv3 quên hoặc ngại không đề cập đến code.

Đó Bác thấy không, trắc địa vẫn là trắc địa: đo, xử lý số liệu thô, đưa qua chương trình nào đó (Cad chẳng hạn) tạo thành bản vẽ.

Cảm ơn Bác quan tâm, mong rằng Bác và các cao thủ nghiên cứu viết một lisp chung để xử lý số liệu đo và tạo bản vẽ nhanh. Đưa vào kho dữ liệu lisp của diễn đàn để mọi ngươì dễ tìm thấy. Cám ơn Bác lần nữa

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ảm ơn Bác quan tâm, mong rằng Bác và các cao thủ nghiên cứu viết một lisp chung để xử lý số liệu đo và tạo bản vẽ nhanh. Đưa vào kho dữ liệu lisp của diễn đàn để mọi ngươì dễ tìm thấy. Cám ơn Bác lần nữa

Từ lâu mình đã có ý tổng hợp các tiện ích liên quan đến Trắc địa - Bản đồ vào 1 chương trình duy nhất, như là bản thử nghiệm thuộc dự án CadViet Utility (CVU). Nếu như mình am hiểu tương đối về chuyên ngành Trắc địa thì có lẽ chương trình đã ra mắt anh em rồi. Đáng tiếc là mình chỉ hiểu lơ mơ, chưa có được cái nhìn toàn diện để tổng hợp. Bởi vậy, muốn có được chương trình, rất cần sự hỗ trợ của các bạn trong ngành. Cụ thể, mình đang cần những cái sau:

1) Hiểu biết về những công việc cụ thể, từ lúc vác máy đi ngắm cho đến lúc ra được bản đồ địa chính hoặc địa hình; các công việc liên quan đến xử lý, biên tập, trích xuất thông tin, lập báo cáo... từ các file bản đồ đã lập.

2) Các quy ước, quy trình, quy phạm của ngành có liên quan đến các việc trên

3) Các ví dụ, với số liệu cụ thể, bằng chính các file *.xls, *.dwg... mà các bạn thực hiện trong công tác thực tế, được trình bày với quy cách mà các bạn cho là đẹp nhất, chuẩn nhất (nếu file lớn, chỉ cần trích 1 đoạn thôi). Các file minh hoạ này có ý nghĩa rất quan trọng đối với người lập trình:

- Giúp người lập trình hiểu chính xác vấn đề. Xin lưu ý các bạn một lần nữa, chương trình cần đầy đủ các thông tin, kể cả những thông tin có thể bị bỏ qua, không đề cập tới (vì bị cho là nhỏ nhặt): layer, màu sắc, chiều cao text, vị trí text so với point... Nhiều thứ lắm, liệt kê chắc chắn sẽ thiếu, nhưng ví dụ cụ thể bằng file thì tự thân nó đã có đầy đủ.

- Có cái cụ thể để test và chỉnh sửa chương trình khi lập xong

  • 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ưong trình trên viết đã lâu rồi nên còn nhiều lỗi và không tương thích với các véion sinh sau đẻ mụôn của CAD.

Tuy nhiên những chtr sau này của tôi sẽ luôn luôn tương thích với bất kỳ version tuơng lai nào của CAD.

Thank ssg.

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ừ lâu mình đã có ý tổng hợp các tiện ích liên quan đến Trắc địa - Bản đồ vào 1 chương trình duy nhất, như là bản thử nghiệm thuộc dự án CadViet Utility (CVU). Nếu như mình am hiểu tương đối về chuyên ngành Trắc địa thì có lẽ chương trình đã ra mắt anh em rồi. Đáng tiếc là mình chỉ hiểu lơ mơ, chưa có được cái nhìn toàn diện để tổng hợp. Bởi vậy, muốn có được chương trình, rất cần sự hỗ trợ của các bạn trong ngành. Cụ thể, mình đang cần những cái sau:

1) Hiểu biết về những công việc cụ thể, từ lúc vác máy đi ngắm cho đến lúc ra được bản đồ địa chính hoặc địa hình; các công việc liên quan đến xử lý, biên tập, trích xuất thông tin, lập báo cáo... từ các file bản đồ đã lập.

2) Các quy ước, quy trình, quy phạm của ngành có liên quan đến các việc trên

3) Các ví dụ, với số liệu cụ thể, bằng chính các file *.xls, *.dwg... mà các bạn thực hiện trong công tác thực tế, được trình bày với quy cách mà các bạn cho là đẹp nhất, chuẩn nhất (nếu file lớn, chỉ cần trích 1 đoạn thôi). Các file minh hoạ này có ý nghĩa rất quan trọng đối với người lập trình:

- Giúp người lập trình hiểu chính xác vấn đề. Xin lưu ý các bạn một lần nữa, chương trình cần đầy đủ các thông tin, kể cả những thông tin có thể bị bỏ qua, không đề cập tới (vì bị cho là nhỏ nhặt): layer, màu sắc, chiều cao text, vị trí text so với point... Nhiều thứ lắm, liệt kê chắc chắn sẽ thiếu, nhưng ví dụ cụ thể bằng file thì tự thân nó đã có đầy đủ.

- Có cái cụ thể để test và chỉnh sửa chương trình khi lập xong

Hoan nghênh Bác đã có “thai ngén” một dự án liên quan đến trắc địa –Bản đồ, thực ra trắc địa cũng như bao nghành khác , nó rộng lắm, nhưng chỉ nói về việc đo và xử lý số liệu để tạo bản đồ thì có thể khái quát như sau:

1/Lập lưới khống chế khu vực đo: lưới là tập hợp các điểm mốc mà sau này có thể dùng làm điểm đặt máy để đo chi tiết. Các điểm mốc tạo thành một mạng bao gồm nhiều hình tam giác, đa giác hoặc một đường chuyền hở(các đọan thẳng nói với nhau tạo thành đường gấp khúc). Việc đo đạc trên lưới là để xác định được độ cao và tọa độ của từng điểm mốc (Bác không phải dân trong nghề nên không cần hiểu sâu nội dung này)

2/Đo chi tiết: đặt máy tại một điểm mốc đã biết tọa độ và độ cao, chọn một điểm khác đã biết tọa độ để làm hướng khởi đầu (máy ngắm điểm này có góc ngang là 0), quay máy ngắm điểm dựng mia(gọi là điểm chi tiết) để đọc số, ở đây xin đề cập đối với máy thông thường (máy kinh vĩ quang cơ, hòan tòan ghi chép bằng thủ công), thông tin đọc, ghi gồm có: tên điểm mia, chiều dài nghiêng từ máy đến mia (nghiêng bỡi vì đường nhìn lên hay xuống phụ thuộc vào điểm mia cao hay thấp), góc ngang (theo độ, phút, giây so với hướng khởi đầu), góc đứng( tùy lọai máy, nhưng phổ thông nhất vẫn là 0o00’00” khi ống kính nằm ngang, ống kính hướng lên trên là góc dương, tăng dần từ 0 dến +90o, ngược lại là góc âm ),cao mia, ghi chú (phần này giúp cho công tác biên tập nội nghiệp( ví dụ: điiểm nào nối tới điểm nào, điểm nào là cây, nhà, …)

* Nếu không thích đọc chiều dài nghiêng trực tiếp thì có thể đọc dây trên, chiều dài nghiêng được tính như sau: (dây trên - cao mia)x 0.2 (đơn vị là mét)

3/Xử lý số liệu đo: tính khỏang cách ngang từ máy đến mia, độ cao điểm mia, tọa độ điểm mia

-công thức tính K/cách ngang: S= D.cos2v ; trong đó: D là chiều dài nghiêng (mét), v là góc đứng

-Công thức tính độ cao điểm mia: H=Hm +(D.sin(2v))/2 +i-l ;trong đó Hm là độ cao mốc đặt máy, i là chiều cao của máy, l là cao mia

Khi tọa độ điểm máy đã biết, dựa vào góc ngang so với hướng khởi đầu và chiều dài ngang S mới vừa xác định để xác định tọa độ điểm mia (gọi là phương pháp tọa độ cực)

4/Tạo bản vẽ: vẽ điểm mia theo phương pháp cực, ghi độ cao, thực hiện nối điểm nếu có, hoặc vẽ các địa vật nhờ vào ghi chú

*Nếu là dân địa chính thì không cần tính độ cao, chỉ tính K/cách ngang, thực hiện ngay việc nối các cạnh thửa, tính diện tích thửa, đánh số thứ tự thửa theo chiều trái qua phải, từ trên xuống và ghi các thông tin vào thửa như tên người sử dụng, lọai đất, diện tích và vẽ các địa vật khác

*Nếu là dân địa hình thì công tác khá quan trọng và phức tạp là chạy đường đồng mức (bình đồ), dựa vào giá trị độ cao của điểm mia, vẽ các địa vật khác

5/Text thể hiện thông tin :

-Đối với bản đồ địa chính thì thông tin được ghi vào tâm thửa đất dạng hỗn số, các thông tin khác ghi ở vị trí bất kỳ trong thửa

Đối với bản đồ địa hình, độ cao lấy tròn đến hai số lẻ và ghi tại vị trí sao cho dấu chấm thập phân trùng chấm điểm mia, ghi chú thường được ghi bên dưới lệch về phải, tên điểm ghi ở trên

Về màu sắc, chiều cao text là tùy chọn. Màu sắc qui chuẩn thường áp dụng cho bản đồ chuyên đề (như thổ nhưỡng, qui họach đất đai…), chiều cao phụ thuộc vào tỷ lệ bản đồ

6/Trích xuất thông tin, lập báo cáo: đối với bản đồ địa chính, sau khi hòan chỉnh bản đồ, cần trích xuất ra file báo cáo gồm các thông tin địa lý (tọa độ đỉnh thửa), số hiệu thửa đất, diện tích, lọai đất, tên người sử dụng…

Xuất phát từ nội dung trên, yêu cầu đặt ra cho chương trình mà Lisp thực hiện có hai giải pháp đối với mỗi mảng:

1/Đối với địa chính: nếu xử lý số liệu bên excel, bảng cơ sở dữ liệu có các cột: tên điểm, tọa độ X,Y, ghi chú (hoặc code), xuất qua Cad, dùng lệnh nối điểm để tạo thành thửa đất, tạo tâm thửa, đánh số thửa tự động, tính diện tích và ghi vào thửa; Nếu xử lý trực tiếp bên Cad thì yêu cầu nhập dữ liệu trong hộp thọai, gồm các edit_box: tên trạm máy, cao máy, hướng khởi đầu; tên điểm mia, dài nghiêng (hoặc dây trên), cao mia, góc ngang, góc đứng, ghi chú ,hoặc code

2/Đối với địa hình: nếu xử lý số liệu bên Excel, gồm các cột: tên điểm, tọa độ X,Y, Z, ghi chú ,hoặc code, xuất qua Cad, chương trình thực hiện nối các địa vật như sông, suối, đường giao thông, hoặc vẽ các ký hiệu địa vật như cây, cột cờ, trụ điện…(các Symbol này được cất giữ trong một thư viện nào đó). Nếu xử lý trực tiếp trong Cad, yêu cầu hộp thọai như trên nhưng phải tính thêm độ cao để ghi lên điểm mia

Mỗi lọai thông tin nằm trên một layer riêng (ví dụ tendiem, docao, code…)

( cái vướng của việc xử lý trực tiếp trên Cad là một lần thực hiện lệnh cho một điểm mia nhưng lại phải nhập lại thông tin trạm máy, nếu được nhập tất cả các điểm mia trong một trạm máy cho mỗi một lần thực hiện lệnh và lưu được dữ liệu thì sẽ ưu thế hơn)

Quá dài dòng phải không Bác Ssg?, nói tóm lại là không dám yêu cầu cao hơn (chẳng hạn chạy được bình đồ), yêu cầu là xử lý số liệu đo, dùng lệnh để vẽ và thể hiện thông tin các đối tượng đo đạc

Sẽ có người cho rằng sao không sử dụng các chương trình khác (SDR, Sufer, Autodesk survey…), thực ra các chương trình đó không phải dân trắc địa nào cũng biết, hơn nữa nhiều người (như tôi) vẫn thích chơi Cad hơn

Hy vọng rằng “ thai nghén” của bác sớm đơm hoa kết trái, chúc sức khỏe, thành đạt

Quí đàn anh trắc địa bỏ qua nếu những khái quát trên đây có gì thiếu sót, mong được góp ý để diễn đàn thêm sôi động

Gửi kèm file mẫu để Bác Ssg tham khảo

 

http://www.cadviet.com/upfiles/mau.dwg

  • 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
Hoan nghênh Bác đã có “thai nghén” một dự án liên quan đến Trắc địa –Bản đồ...

Nếu thống nhất về quan điểm, mời các bạn sang đây bàn bạc cụ thể hơn:

 

http://www.cadviet.com/forum/index.php?showtopic=2691

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

Visual Lisp và ActiveX Automation

 

Lisp có những ưu thế tuyệt vời khi làm việc với Acad:

- Dễ dàng tạo các đối tượng Acad cũng như truy xuất dứ liệu từ chúng

- Gọi command của Acad rất đơn giản và tự nhiên như "người trong nhà"

- Các lệnh được tạo bằng lisp được Acad "đối xử bình đẳng" như các lệnh chính thống v.v…

Bên cạnh các ưu điểm trên, nhược điểm lớn nhất của Lisp là khả năng giao tiếp với bên ngoài rất hạn chế. Lâu nay, để truy xuất dữ liệu từ Excel, mình vẫn thường phải qua 1 trong 2 dạng file trung gian *.txt (Tab delimited - phân biệt các field bằng ký tự Tab) và *.csv (Comma delimited - phân biệt các field bằng dấu phẩy).

Nhược điểm này có thể khắc phục được bằng cách dùng ActiveX Automation.

Tổng quan về ActiveX, xin được trích dẫn Help:

 

"ActiveX Automation is a new way to work programmatically with the contents of an AutoCAD drawing. In many instances, ActiveX works faster than traditional AutoLISP functions in manipulating AutoCAD drawing objects.

The ActiveX programming interface is usable from a number of languages and environments, such as C++, Visual BasicTM, and DelphiTM. When you work with ActiveX objects in AutoLISP, you work with the same object model, properties, and methods that can be manipulated from other programming environments."

 

Translation:

ActiveX Automation là một phương pháp mới để lập trình với AutoCAD. Trong nhiều trường hợp, ActiveX làm việc nhanh hơn các hàm AutoLisp truyền thống trong việc xử lý các đối tượng AutoCAD.

ActiveX có thể dùng được với một số ngôn ngữ và môi trường lập trình như C++, VB và Delphi. Khi làm việc với ActiveX trong AutoLisp, bạn thao tác với Objects – Properties – Methods giống như trong những môi trường lập trình nói trên.

 

Visual Lisp cung cấp một số hàm dạng vlax-xxxx để làm việc với ActiveX. Thực tế là từ trước đến nay, bản thân mình cũng chưa có điều kiện nghiên cứu sâu về chúng. Khó khăn lớn nhất là không có tài liệu, ngay cả Help của Acad cũng hướng dẫn sơ sài. Tuy chưa biết nhiều, nhưng mình thấy mảng này khá hay. Làm chủ được nó, chúng ta có thể dùng Lisp truy xuất dữ liệu trực tiếp từ các ứng dụng khác (Excel là 1 ví dụ), không phải “nhiêu khê” như trước nữa.

 

Một ví dụ minh họa để các bạn thử nghiệm:

(defun C:GED();;;Get Excel Data
(vl-load-com)
(setq
ex (vlax-get-object "Excel.Application")
sl (vlax-get-property ex 'selection)
txtvr (vlax-get-property sl 'text)
txt (vlax-variant-value txtvr)
ir (vlax-get-property sl 'row)
ic (vlax-get-property sl 'column)
)
(alert
(strcat
	"\nContent: " txt
	"\nColumn: " (chr (+ ic 64))
	"\nRow: " (itoa ir)
)
)
)

Trình tự thử:

- Appload đoạn lisp trên

- Khởi động Excel, open 1 file *.xls nào đó

- Pick chọn 1 cell bất kỳ (có chứa dữ liệu để kiểm tra)

- Sang Acad, gõ lệnh GED để thử

Kết quả: 1 message_box ghi thông tin về nội dung, chỉ số cột và hàng của cell mà bạn đã chọn.

 

Đặt vấn đề:

1) Đã lấy được dữ liệu của 1 cell thì tất nhiên sẽ lấy được dữ liệu của cả sheet, và đã import được thì tất nhiên cũng export được. Bằng cách nào thì mời các bạn có hứng thú với cái này “ngâm cứu” tiếp. Trước mắt, chỉ cần lấy được dữ liệu của một vùng được selected trong bảng Excel đang hiện hành (ví dụ như B3:F17 chẳng hạn) là đã ứng dụng được cho khối việc rồi.

2) Các thao tác trên hoàn toàn không dùng đến kho libraries của bất cứ trình ứng dụng nào. Phải nhờ vả đến “đám” này rất là phiền toái vì sự không tương thích giữa các version. Nếu phải dùng đến libraries, khi người ta nâng cấp version của Excel, rất nhiều khả năng chương trình của chúng ta sẽ không chạy được. Bản thân ssg ít thích dùng VB chính vì nó phụ thuộc vào các libraries quá nhiều!

Để khẳng định điều này, ssg nhờ các bạn kiểm tra giúp xem đoạn lisp trên có làm việc được với mọi version của AutoCAD cũng như Excel hay không? Ssg đã thử với Cad2002, Cad2007 và Excel2003, kết quả OK.

3) Các bạn thường lập trình với VB và ActiveX có kinh nghiệm hoặc tài liệu gì (tiếng Việt hoặc tiếng Anh đều tốt) về vấn đề này xin được chia sẻ.

 

Cám ơn tất cả các bạn,

  • Vote tăng 4

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 có những ưu thế tuyệt vời khi làm việc với Acad:

- Dễ dàng tạo các đối tượng Acad cũng như truy xuất dứ liệu từ chúng

- Gọi command của Acad rất đơn giản và tự nhiên như "người trong nhà"

- Các lệnh được tạo bằng lisp được Acad "đối xử bình đẳng" như các lệnh chính thống v.v…

Bên cạnh các ưu điểm trên, nhược điểm lớn nhất của Lisp là khả năng giao tiếp với bên ngoài rất hạn chế. Lâu nay, để truy xuất dữ liệu từ Excel, mình vẫn thường phải qua 1 trong 2 dạng file trung gian *.txt (Tab delimited - phân biệt các field bằng ký tự Tab) và *.csv (Comma delimited - phân biệt các field bằng dấu phẩy).

Nhược điểm này có thể khắc phục được bằng cách dùng ActiveX Automation.

Tổng quan về ActiveX, xin được trích dẫn Help:

 

"ActiveX Automation is a new way to work programmatically with the contents of an AutoCAD drawing. In many instances, ActiveX works faster than traditional AutoLISP functions in manipulating AutoCAD drawing objects.

The ActiveX programming interface is usable from a number of languages and environments, such as C++, Visual BasicTM, and DelphiTM. When you work with ActiveX objects in AutoLISP, you work with the same object model, properties, and methods that can be manipulated from other programming environments."

 

Translation:

ActiveX Automation là một phương pháp mới để lập trình với AutoCAD. Trong nhiều trường hợp, ActiveX làm việc nhanh hơn các hàm AutoLisp truyền thống trong việc xử lý các đối tượng AutoCAD.

ActiveX có thể dùng được với một số ngôn ngữ và môi trường lập trình như C++, VB và Delphi. Khi làm việc với ActiveX trong AutoLisp, bạn thao tác với Objects – Properties – Methods giống như trong những môi trường lập trình nói trên.

 

Visual Lisp cung cấp một số hàm dạng vlax-xxxx để làm việc với ActiveX. Thực tế là từ trước đến nay, bản thân mình cũng chưa có điều kiện nghiên cứu sâu về chúng. Khó khăn lớn nhất là không có tài liệu, ngay cả Help của Acad cũng hướng dẫn sơ sài. Tuy chưa biết nhiều, nhưng mình thấy mảng này khá hay. Làm chủ được nó, chúng ta có thể dùng Lisp truy xuất dữ liệu trực tiếp từ các ứng dụng khác (Excel là 1 ví dụ), không phải “nhiêu khê” như trước nữa.

 

Một ví dụ minh họa để các bạn thử nghiệm:

(defun C:GED();;;Get Excel Data
(vl-load-com)
(setq
ex (vlax-get-object "Excel.Application")
sl (vlax-get-property ex 'selection)
txtvr (vlax-get-property sl 'text)
txt (vlax-variant-value txtvr)
ir (vlax-get-property sl 'row)
ic (vlax-get-property sl 'column)
)
(alert
(strcat
	"\nContent: " txt
	"\nColumn: " (chr (+ ic 64))
	"\nRow: " (itoa ir)
)
)
)

Trình tự thử:

- Appload đoạn lisp trên

- Khởi động Excel, open 1 file *.xls nào đó

- Pick chọn 1 cell bất kỳ (có chứa dữ liệu để kiểm tra)

- Sang Acad, gõ lệnh GED để thử

Kết quả: 1 message_box ghi thông tin về nội dung, chỉ số cột và hàng của cell mà bạn đã chọn.

 

Đặt vấn đề:

1) Đã lấy được dữ liệu của 1 cell thì tất nhiên sẽ lấy được dữ liệu của cả sheet, và đã import được thì tất nhiên cũng export được. Bằng cách nào thì mời các bạn có hứng thú với cái này “ngâm cứu” tiếp. Trước mắt, chỉ cần lấy được dữ liệu của một vùng được selected trong bảng Excel đang hiện hành (ví dụ như B3:F17 chẳng hạn) là đã ứng dụng được cho khối việc rồi.

2) Các thao tác trên hoàn toàn không dùng đến kho libraries của bất cứ trình ứng dụng nào. Phải nhờ vả đến “đám” này rất là phiền toái vì sự không tương thích giữa các version. Nếu phải dùng đến libraries, khi người ta nâng cấp version của Excel, rất nhiều khả năng chương trình của chúng ta sẽ không chạy được. Bản thân ssg ít thích dùng VB chính vì nó phụ thuộc vào các libraries quá nhiều!

Để khẳng định điều này, ssg nhờ các bạn kiểm tra giúp xem đoạn lisp trên có làm việc được với mọi version của AutoCAD cũng như Excel hay không? Ssg đã thử với Cad2002, Cad2007 và Excel2003, kết quả OK.

3) Các bạn thường lập trình với VB và ActiveX có kinh nghiệm hoặc tài liệu gì (tiếng Việt hoặc tiếng Anh đều tốt) về vấn đề này xin được chia sẻ.

 

Cám ơn tất cả các bạn,

Quá hay, nhấn nút Thank cũng chưa đã, phải Thank bằng lời mới được, đã test trên các version 2004,2005 , kết quả như ý, nhưng trên R14 thì báo lỗi sau:

Command: ged

error: null function

(VL-LOAD-COM)

(C:GED)

*Cancel*

Ssg viết tiếp đi, không những hiển thị dữ liệu 1 cell mà lấy cả dữ liệu của 1 row

  • 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
... đã test trên các version 2004,2005 , kết quả như ý, nhưng trên R14 thì báo lỗi sau:

Command: ged

error: null function

(VL-LOAD-COM)

(C:GED)

*Cancel*

Ssg viết tiếp đi, không những hiển thị dữ liệu 1 cell mà lấy cả dữ liệu của 1 row

Mình nhớ không lầm thì R14 chưa hỗ trợ vla-xxxx functions, đành chịu thôi. Theo ssg, dù computer có "bèo" mấy đi nữa cũng chơi được thằng 2002 chứ? R14 đã xong "sứ mạng lịch sử" của nó rồi, có lẽ nên xếp vào viện bảo tàng?!

Còn việc phát triển kỹ thuật ActiveX thì trên nguyên tắc chắc chắn là được, không phải chỉ lấy dữ liệu của 1 row mà là cả sheet, nhưng... hãy đợi đấy! Chẳng có tài liệu gì cả, chỉ mò mẫm làm theo kiểu thử sai, mất thời gian lắm!

 

Mình quên, còn 1 chiêu nữa để tìm hiểu VLA-Objects:

- Cú pháp: (vlax-dump-object obj [T])

- Công dụng: Lists an object's properties, and optionally, the methods that apply to the object. If specified, vlax-dump-object also lists all methods that apply to obj.

- Arguments: VLA-object, [T: true, optional]

- Return Values: T, if successful. If an invalid object name is supplied, vlax-dump-object displays an error message.

- Ví dụ: với biến ex nhận được ở trên, các bạn dùng (vlax-dump-object ex T), bấm F2 xem. Nó xổ ra đúng là một dump (đống) các Properties và Methods, tha hồ mà "ngâm cứ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ó cái này kg biết giúp ích gì cho Bác Ssg kg?

Cái này down đã lâu nhưng chưa rãnh ngcứu đc.

Thấy Bác quan tâm đến vấn đề này, gửi Bác ngcứu.

http://www.cadviet.com/upfiles/Obtaining_v...oft_Excel_.code

  • 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
Có cái này kg biết giúp ích gì cho Bác Ssg kg?

Cái này down đã lâu nhưng chưa rãnh ngcứu đc.

Thấy Bác quan tâm đến vấn đề này, gửi Bác ngcứu.

http://www.cadviet.com/upfiles/Obtaining_v...oft_Excel_.code

Nhận xét sơ bộ:

- Theo giới thiệu của chương trình thì đúng mục đích của mình.

- Cần phải thêm vào đầu chương trình hàm (vl-load-com). Đây là thủ tục bắt buộc, load Visual Lisp Extensions trước khi gọi các functions vla-xxxx

- Thêm vào rồi nhưng chạy vẫn lỗi, chưa rõ từ đâu:

Command: (get_xl tbl)

; error: Automation Error. Too many fields defined. (chưa biết thừa cái gì!)

- Từ từ đọc hết code của nó, dù không chạy được chắc cũng hiểu ra thêm cái gì đó hữu ích...

 

Cám ơn sự quan tâm và chia sẻ của bạn.

  • 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
; error: Automation Error. Too many fields defined. (chưa biết thừa cái gì!)

 

Mình chạy thì đc cái này:

Command: (setq tbl "D:\\ZThien\\DO-ING\\test-noCAD\\7.xls")

"D:\\ZThien\\DO-ING\\test-noCAD\\7.xls"

 

Command: (GET_xl tbl)

(("Sheet1$" (1.0 2.0 4.0 8.0) (2.0 3.0 5.0 9.0) (3.0 4.0 6.0 10.0) (4.0 5.0 7.0

11.0) (5.0 6.0 8.0 12.0) (6.0 7.0 9.0 13.0) (7.0 8.0 10.0 14.0) (8.0 9.0 11.0

15.0) (9.0 10.0 12.0 16.0)) ("Sheet2$") ("Sheet3$"))

 

Còn đây là file excel

7xl.jpg

7xlxp8.jpg

 

Và đây là file lisp:

http://www.cadviet.com/upfiles/get_xl_1.lsp

 

Nghe Bác ssg nói lỗi, mình liền chạy thử nhưng kg thấy lỗi gì cả!?

Bác ssg kiểm tra 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
- Cần phải thêm vào đầu chương trình hàm (vl-load-com). Đây là thủ tục bắt buộc, load Visual Lisp Extensions trước khi gọi các functions vla-xxxx

Để test thì đưa vào.

nhưng sau này thì: vì(Get-xl )là 1 hàm con nên (vl-load-com) sẽ đc đưa vào chương trình chí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
Nghe Bác ssg nói lỗi, mình liền chạy thử nhưng kg thấy lỗi gì cả!?

Bác ssg kiểm tra lại.

I'm sorry!

Hôm qua mình lấy 1 file *.xls bất kỳ có sẵn thì lỗi như vậy. Xem kỹ file bị lỗi cũng chẳng có gì bất thường, chưa hiểu nguyên nhân! Mình up lên bạn xem thử:

http://www.cadviet.com/upfiles/vd.xls

Hôm nay mình đã thử lại với rất nhiều file khác, kết quả tuyệt vời. Một lần nữa, cám ơn bạn nhiều.

Còn một chút "lăn tăn" là tại sao file kia bị lỗi? Tìm ra nguyên nhân mới yên tâm đượ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ó bác nào có list chuyển từ exell sang cad xin gởi cho mình với, mình làm thống kêt thép trên exell nhưng mà chuyển qua cad rất khó khăn

Xin góp ý nhẹ nhàng:

1) Bạn là dân kỹ thuật, nên cẩn trọng và có trách nhiệm hơn về những gì mình viết. Chỉ một đoạn ngắn mà có đến mấy lỗi sai từ (đánh dấu đỏ trên)

2) Bạn nêu yêu cầu chưa rõ ý lắm. Bạn cần chuyển cái gì qua CAD? Toàn bộ sheet, một phần sheet, hay chuyển dữ liệu cho chương trình lisp nào đó xử lý theo ý đồ riêng?

3) Nếu chuyển toàn bộ sheet, bạn đã thử dùng lệnh như sau chưa:

Menu - Insert - OLE Object - Create from file - Browse - Chọn file *.xls - Open - OK

Nếu cách trên không hợp ý, bạn hãy trình bày lại để người khác hiểu rõ hơn ý bạn muốn gì.

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òn một chút "lăn tăn" là tại sao file kia bị lỗi? Tìm ra nguyên nhân mới yên tâm được!

Mình biết nguyên nhân rồi, nếu trong sheet có dữ liệu thì row 1 không được phép để trố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
có bác nào có list chuyển từ exell sang cad xin gởi cho mình với, mình làm thống kêt thép trên exell nhưng mà chuyển qua cad rất khó khăn

 

Bạn mở EXCEL chọn vùng cần chuyển.

Sang ACAD chọn edit -> paste special... -> autocad entities

Chỉ 1 điểm nó sẽ chuyển sang thành đối tượng cad cho bạn.

Đối cad14 thì nó chuyển được cả các nét vẽ hình dáng thép cón các cadkhác thì hình như chỉ qua khung và text.

  • 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

Xử lý tốt sự liên kết giữa Lisp và Excel sẽ mở ra nhiều khả năng để tạo nên những ứng dụng rất hiệu quả.

Mình nhờ tất cả các bạn quan tâm đến chủ đề này một việc: kiểm tra giúp đoạn lisp sau có chạy được với mọi version của Acad lẫn Excel hay không (đặc biệt chú trọng đến version của Excel). Mình đã thử với Cad2002, Cad2007 và Excel 2003, kết quả OK.

Trình tự test:

1) Tạo 1 file Excel đơn giản và ngắn, chừng vài hàng vài cột, tương tự như bảng mà bạn Nộ Thiên đã post ở trên (để cho nhanh và dễ kiểm tra kết quả). Không nên dùng tiếng Việt có dấu. Chú ý: không được bỏ trống row1.

2) Lưu file dạng *.xls bình thường và thoát hẳn trình Excel đang chạy.

3) Appload đoạn code sau và gõ lệnh TEST

Nếu kết quả tốt, sẽ hiện ra message_box với đầy đủ số liệu bố trí như bên Excel. Kết quả thử với các version thế nào phiền các bạn báo lại cho mình biết.

Cám ơn rất nhiều,

Ssg

 

;;;-----------------------------------------------------
(defun C:TEST( / fn d s x y)
(vl-load-com)
(setq
   fn (getfiled "Select Data File" "" "xls" 0)
   d (cdr (car (get_xl fn)))
   s ""
)
(foreach x d
   (foreach y x
       (if (= y nil) (setq y ""))
       (if (/= (type y) 'STR) (setq y (rtos y)))
       (setq s (strcat s y "\t"))
   )
   (setq s (strcat s "\n"))
)
(alert s)
) 

;;;-----------------------------------------------------
(defun rec-rem-dupl (lst)
(if lst
 (cons (car lst) (rec-rem-dupl (vl-remove (car lst) (cdr lst))))
) ;_  if
) ;_  defun
;;;-----------------------------------------------------
(defun GET_xl (tbl / ADOCONNECT ADORECORDSET LST)
(setq
 ADOConnect   (vlax-get-or-create-object "ADODB.Connection")
 ADORecordset (vlax-get-or-create-object "ADODB.Recordset")
) ;_  setq
(if (not
     (vl-catch-all-error-p
      (vl-catch-all-apply
       (function vlax-invoke-method)
       (list
        ADOConnect
        "Open"
        (strcat
         "Provider=Microsoft.Jet.OLEDB.4.0;Data Source="
         tbl
         ";Extended Properties=;Excel 8.0;HDR=No"
        ) ;_  strcat
        "admin"
        ""
        nil
       ) ;_  list
      ) ;_  vl-catch-all-apply
     ) ;_  vl-catch-all-error-p
    ) ;_  not
 (progn
  (setq
   lst (mapcar
        (function
         (lambda (l / i c)
          (vlax-invoke-method
           ADORecordset
           "Open"
           (strcat "SELECT * FROM [" l "]")
           ADOConnect
           1
           3
           nil
          ) ;_  vlax-invoke-method
          (setq
           i (length
              (car
               (vlax-safearray->list
                (vlax-variant-value
                 (vlax-invoke-method
                  ADORecordset
                  "GetRows"
                  65535
                 ) ;_  vlax-invoke-method
                ) ;_  vlax-variant-value
               ) ;_  vlax-safearray->list
              ) ;_  car
             ) ;_  length
          ) ;_  setq
          (vlax-invoke-method ADORecordset "Close")
          (while (not (zerop i))
           (vlax-invoke-method
            ADORecordset
            "Open"
            (strcat "SELECT * FROM [" l "a" (itoa i) ":IV" (itoa i) "]")
            ADOConnect
            1
            3
            nil
           ) ;_  vlax-invoke-method
           (setq
            c (cons
               (car
                (apply
                 (function mapcar)
                 (cons
                  'list
                  (mapcar
                   (function
                    (lambda (a)
                     (mapcar
                      (function
                       (lambda (:)
                        (vlax-variant-value :)
                       ) ;_  lambda
                      ) ;_  function
                      a
                     ) ;_  mapcar
                    ) ;_  lambda
                   ) ;_  function
                   (vlax-safearray->list
                    (vlax-variant-value
                     (vlax-invoke-method
                      ADORecordset
                      "GetRows"
                      65535
                     ) ;_  vlax-invoke-method
                    ) ;_  vlax-variant-value
                   ) ;_  vlax-safearray->list
                  ) ;_  mapcar
                 ) ;_  cons
                ) ;_  apply
               ) ;_  car
               c
              ) ;_  cons
            i (1- i)
           ) ;_  setq
           (vlax-invoke-method ADORecordset "Close")
          ) ;_  while
          (if (equal c '((nil) (nil)))
           (list l)
           (cons l c)
          ) ;_  if
         ) ;_  lambda
        ) ;_  function
        (rec-rem-dupl
         (caddr
          (mapcar
           (function
            (lambda (a)
             (mapcar
              (function vlax-variant-value)
              a
             ) ;_  mapcar
            ) ;_  lambda
           ) ;_  function
           (vlax-safearray->list
            (vlax-variant-value
             (vlax-invoke-method
              (vlax-invoke-method
               ADOConnect
               "OpenSchema"
               4
              ) ;_  vlax-invoke-method
              "GetRows"
              65535
             ) ;_  vlax-invoke-method
            ) ;_  vlax-variant-value
           ) ;_  vlax-safearray->list
          ) ;_  apply
         ) ;_  caddr
        ) ;_  rec-rem-dupl
       ) ;_  mapcar
  ) ;_  setq
  (vlax-invoke-method ADOConnect "Close")
  (vlax-release-object ADORecordset)
  (vlax-release-object ADOConnect)
  (setq ADORecordset nil
        ADOConnect nil
  ) ;_  setq
  lst
 ) ;_  progn
 (progn
  (vl-catch-all-apply
   'vlax-invoke-method
   (list ADOConnect "Close")
  ) ;_  vl-catch-all-apply
  (vlax-release-object ADORecordset)
  (vlax-release-object ADOConnect)
  (setq ADORecordset nil
        ADOConnect nil
  ) ;_  setq
  nil
 ) ;_  progn
) ;_  if
) ;_  defun

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
(mapcar

(function

(lambda (:)

(vlax-variant-value :)

) ;_ lambda

) ;_ function

a

) ;_ mapcar

) ;_ lambda

) ;_ function

Nên đưa file lên đi Bác SSg ơi, bởi vì kí tự " b )" trở thành icon mất.

Hôm trước mình post kiểu này kg đc nên mới gửi file lsp lên đó.

  • 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ên đưa file lên đi Bác SSg ơi, bởi vì kí tự " b )" trở thành icon mất.

Hôm trước mình post kiểu này kg đc nên mới gửi file lsp lên đó.

Cám ơn bạn đã nhắc nhở, mình sơ ý không xem lại. Hình như lỗi này admin bó tay?

Nếu link trên không down được, các bạn down ở đây:

 

http://www.esnips.com/doc/f8166534-fce9-4d...6d5/data_excel2

 

Cái này rất quan trọng, trước mắt là sẽ dùng cho một số module của chương trình LandCadViet Utility. Mong các bạn có điều kiện test giúp.

Một lần nữa, 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
Tôi muốn các bạn chia sẽ cách nhập và xuất số liệu giữa Autocad và Excel, được viết bằng ngôn ngữ AutoLISP. nếu được có thể cho xem ví dụ mẫu.

Cám ơn.

 

Uhm, tui search google được nhiều lắm này. :)

(defun Txt->Excel(/ Boucle Ent Excel_Lance Js Objet_Excel Rng Xl Xl_Classeur Xl_Feuilles Xl_Feuille_Active)

(if (car (setq Objet_Excel (Liaison_Excel)))

(progn

(princ (strcat "\nConnexion avec Excel " (cadr Objet_Excel)))

(princ)

(if (setq Xl (vlax-get-object "Excel.Application"))

(setq Excel_Lance T)

(setq Xl (vlax-create-object "Excel.Application"))

)

(if Xl

(progn

(if (null Xl-open)

(vlax-import-type-library

:tlb-filename (car Objet_Excel)

:methods-prefix "Xl-"

:properties-prefix "Xlp-"

:constants-prefix "Xlc-")

)

(if (not Excel_Lance)

(vlax-invoke-method (vlax-get-property Xl 'WorkBooks) 'Add)

)

(setq Xl_Classeur (vlax-get-property XL "ActiveWorkbook"))

(setq Xl_Feuilles (vlax-get Xl_Classeur "Sheets"))

(setq Boucle 1)

(while (<= Boucle (xlp-get-count Xl_Feuilles))

(if (= (xlp-get-name (xlp-get-item Xl_Feuilles Boucle))(getvar "dwgname"))

(progn

(setq Xl_Feuille_Active (xlp-get-item Xl_Feuilles Boucle))

(xl-activate Xl_Feuille_Active)

)

)

(setq Boucle (1+ Boucle))

)

(if (not Xl_Feuille_Active)

(progn

(setq Xl_Feuille_Active (xl-add (vlax-get Xl_Classeur "Sheets")))

(xlp-put-name Xl_Feuille_Active (getvar "dwgname"))

)

)

(vla-put-visible Xl 1)

(setq Boucle 0)

(if (setq Js (ssget "x" (list (cons 0 "MTEXT,TEXT"))))

(progn

(while (setq Ent (ssname Js Boucle))

(setq Ent (entget Ent))

(setq Rng (xlp-get-range Xl_Feuille_Active (strcat "A" (itoa (1+ Boucle)))))

(xlp-put-value2 Rng (cdr (assoc 1 Ent)))

(setq Boucle (1+ Boucle))

)

(vla-put-visible (vlax-get-acad-object) 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


×