Chuyển đến nội dung
Diễn đàn CADViet
Đăng nhập để thực hiện theo  
caothang

Kết hợp Excel-AutoLisp-AutoCAD

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

Chào các Anh/Chị ,

công việc của em là detailer, vì thế có những việc mà Em phải làm lập đi lập lại nhiều lần .

không biết rằng lisp có thể hỗ trợ cho Em với yêu cầu sau đây không , nếu có nhờ A/C giúp đỡ

nếu đã có người viết rồi thì cho E xin link.

( có vào mục viết lisp theo yêu cầu mà nhiều trang quá tìm chưa ra )

thanks

 

Yêu cầu của Em như sau :

- lấy thông tin từ excel tự động nhập vào cad tại những vị trí có tọa độ xác định.

 

- ví dụ : em cần phải đục lỗ bắt bulong cho 1 thanh sắt có chiều dài L

vị trí lỗ này cách lỗ kia là theo tính toán bằng excel

 

---> theo thiết kế thì em có được chiều dài L

theo chiều dài L , em phải tính toán ra vị trí cần có lỗ theo tiêu chuẩn

khi có vị trí các lỗ , em phải nhập vào cad, để in ra cho xưởng chế tạo ,

( trong cad Em có vẽ 1 thanh sắt và các lỗ tượng trưng không cần chính xác ,

vị trí các lỗ sau khi tính đưa vào phải chính xác )

với những job lớn Em phải làm việc này rất nhiều lần ( trên 1000 lần)

em có vẽ hình đễ các A/C xem thử :

em có 1 file cad chưa có số và cần lấy số từ excel(sau khi tính toán cộng, trừ ) , để có hình như sau ( chỉ được thay đổi số và phài theo font quy định)

 

xingiupnhapsolieuep4.jpg

 

có cách nào giúp em làm việc này nhanh hơn xin chỉ giúp,

em mới đi làm chưa có kinh nghiệm nhiều về cad

rất mong được giúp đỡ

 

thanks

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 Anh/Chị ,

công việc của em là detailer, vì thế có những việc mà Em phải làm lập đi lập lại nhiều lần .

không biết rằng lisp có thể hỗ trợ cho Em với yêu cầu sau đây không , nếu có nhờ A/C giúp đỡ

nếu đã có người viết rồi thì cho E xin link.

( có vào mục viết lisp theo yêu cầu mà nhiều trang quá tìm chưa ra )

thanks

 

Yêu cầu của Em như sau :

- lấy thông tin từ excel tự động nhập vào cad tại những vị trí có tọa độ xác định.

 

- ví dụ : em cần phải đục lỗ bắt bulong cho 1 thanh sắt có chiều dài L

vị trí lỗ này cách lỗ kia là theo tính toán bằng excel

 

---> theo thiết kế thì em có được chiều dài L

theo chiều dài L , em phải tính toán ra vị trí cần có lỗ theo tiêu chuẩn

khi có vị trí các lỗ , em phải nhập vào cad, để in ra cho xưởng chế tạo ,

( trong cad Em có vẽ 1 thanh sắt và các lỗ tượng trưng không cần chính xác ,

vị trí các lỗ sau khi tính đưa vào phải chính xác )

với những job lớn Em phải làm việc này rất nhiều lần ( trên 1000 lần)

em có vẽ hình đễ các A/C xem thử :

em có 1 file cad chưa có số và cần lấy số từ excel(sau khi tính toán cộng, trừ ) , để có hình như sau ( chỉ được thay đổi số và phài theo font quy định)

 

xingiupnhapsolieuep4.jpg

 

có cách nào giúp em làm việc này nhanh hơn xin chỉ giúp,

em mới đi làm chưa có kinh nghiệm nhiều về cad

rất mong được giúp đỡ

 

thanks

 

Nhìn cái bản vẽ này thì không phải là bản vẽ chế tạo (nhưng vẫn gia công được). Tuy nhiên nếu công việc nhiều thì cũng nên viết chương trình tính và thống kê cho nhanh. Nếu bác không tìm thấy tool đã có sẵn và có nhã ý làm thì liên hệ với em theo thông tin bên dướ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

Là 1 bản vẽ mà kg đc sử dụng như 1 "bản vẽ",thì thà in trực tiếp từ cái bảng excel còn hơn. Đó là góp ý về phần công việc của Bác.

Với Bác Hoành thì việc bạn nhờ là kg khó, nhưng Bác phải đưa file excel và file cad tương ứng lên mới đ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

em đang rất cần các anh/chị giúp với

 

thanks

 

*****

Đây chỉ là bản vẽ để các Anh/Chỉ hiểu ý em

và Em cũng chỉ muốn thay đổi mấy con số đó thôi

 

Bản vẻ đầy đủ thì có thêm thông tin, loại thép, khả năng chịu lực, và các kích thước khác

nhưng mấy cái đó thì em tạo mẩu sẳn rồi chỉ copy là xong, còn điền mấy con số sau khi tính là rất nhiều và cần chính xác

vì có lúc chuyển từ excel do làm nhiều và chưa quen nên em nhập nhầm hoài.

 

cố gắng giúp em nhe

 

thanks

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

Đây chỉ là bản vẽ để các Anh/Chỉ hiểu ý em

và Em cũng chỉ muốn thay đổi mấy con số đó thôi

 

Bản vẻ đầy đủ thì có thêm thông tin, loại thép, khả năng chịu lực, và các kích thước khác

nhưng mấy cái đó thì em tạo mẩu sẳn rồi chỉ copy là xong, còn điền mấy con số sau khi tính là rất nhiều và cần chính xác

vì có lúc chuyển từ excel do làm nhiều và chưa quen nên em nhập nhầm hoài.

 

Theo mình hiểu, ý bạn là:

1. File *.dwg có sẵn như dạng bạn đã post, vị trí các lỗ không cần chính xác

2. Chương trình đọc các số liệu trong bảng excel, sau đó chỉnh sửa các con số ghi toạ độ trong CAD theo các giá trị tương ứng trong bảng là OK.

Nếu đúng như vậy, bạn thử dùng chương trình sau:

 

http://www.cadviet.com/upfiles/Xls2Cad.zip

 

Appload, gõ lệnh X2C (Xls to autoCad) để chạy. Chương trình chỉ yêu cầu bạn làm 2 việc:

1. Quét chọn các text ghi toạ độ mà bạn muốn thay đổi

2. Dialog chọn file hiện ra, chỉ định file *.xls dữ liệu của bạn là xong

 

Lưu ý:

Có thể bạn chưa hiểu nhiều về lập trình, nhưng cần phải hiểu tổng quan thế này:

Một file bất kỳ, muốn làm cơ sở dữ liệu (database) cho chương trình, phải tuân thủ những quy định nào đó một cách nhất quán. Các quy định này do người lập trình đặt ra theo các tiêu chí: đơn giản, rõ ràng, có tính tổ chức tốt... Tóm lại là tạo điều kiện thuận tiện nhất cho lập trình.

File *.xls của bạn không thuận lợi cho lập trình, mình đã sửa lại theo dạng như sau:

 

http://www.cadviet.com/upfiles/Data1.zip

 

Muốn dùng chương trình trên, tất cả các file dữ liệu của bạn bắt buộc phải tuân thủ quy cách như vậy. Cụ thể là:

1. Mỗi file *.xls chỉ sử dụng 1 sheet

2. Phải bắt đầu bảng ở cell A1

3. Cell nào ra cell đó, không dùng tính năng merge cell

4. Row1 dành để ghi tên field. Bạn muốn ghi gì tuỳ ý, chương trình không quan tâm

5. Từ cell A2 trở đi là các dữ liệu thật sự, thứ tự các field theo như file mẫu, không được tuỳ ý thay đổi thứ tự của chúng.

6. Các row và collumn có dữ liệu phải liên tục nhau. Ví dụ, giữa 2 row dữ liệu không được có 1 row bỏ trống.

7. Ngoài các con số dữ liệu, không được ghi thêm bất cứ cái gì vào bảng

 

Để hiểu hơn, bạn hãy hình dung cách hành xử của chương trình:

1. Như đã quy ước, nó không quan tâm đến row1 trong bảng excel

2. Bắt đầu từ row2, đọc data trong các cell theo thứ tự: A2, B2, C2, D2; ghi nhận số liệu ở vị trí thứ 2 và 4 (cell B2 và D2).

3. Tiếp tục cho đến khi... không còn gì để đọc. Nghĩa là, nếu bạn hứng chí ghi ở cell nào đó một nội dung như "Yêu là chết trong lòng một ít..." chẳng hạn, nó vẫn cứ đọc và "vô tư" cho rằng đó là... dữ liệu! Và coi chừng chính cái câu vớ vẩn ấy sẽ được nó chuyển tải sang bản vẽ Cad của bạn!

4. Sắp xếp các dữ liệu nhận được theo thứ tự từ nhỏ đến lớn

5. Trong Acad, ghi nhận các đối tượng text mà bạn đã chọn, sắp xếp chúng theo thứ tự từ trái qua phải

6. Lần lượt thay các trị số đọc được vào các text theo đúng thứ tự

 

Với cách hoạt động như vậy, nếu bạn không tuân thủ các quy định nói trên, kết quả nhận được sẽ sai bét!

 

Bạn dùng thử và nhớ phản hồi cho mình biết 2 vấn đề:

1. Kết quả chạy chương trình

2. Version của AutoCAD và Excel mà bạn dùng

  • Like 1

Chia sẻ bài đăng này


Liên kết tới bài đăng
Chia sẻ trên các trang web khác
Cái này là VBA nhưng dùng tiện hơn lisp

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

File này nên phát triển thêm thì có thế xuất thành 1 bản vẽ hoàn toàn có cả các dim, các lổ và các text ghi chú cần thiết.

Chỉ cần "đóng thêm khung" rồi in. http://www.cadviet.com/upfiles/Ban_ve_gia_cong_demo_only.zip

Có nhiều pm như Tekla, ProSteel vv tự động xuất bản vẽ từ model 3D, nhưng PP thấy dùng VBA, LISP vẩn xuất bản vẽ rất nhanh.

Bản vẽ dưới dây PP chỉ cần khoảng dưới 30 giây là có được. Bản vẽ này sử dụng LISP, tên pm là SP2000.

Bác Nothien có post trên Cadviet.com rồi.

bvgclt6.jpg

w755.png

 

Xem Video clip PP thực hiện: http://www.cadviet.com/upfiles/Ban_ve_gia_cong.zip (link Video)

  • 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

Wow wow wow , được nhiều hồi âm giúp đỡ quá , Em cảm ơn rất nhiều

 

*

Xem Video clip PP thực hiện: http://www.cadviet.com/upfiles/Ban_ve_gia_cong.zip

cài này em tạm lưu để dành sử dụng khi khác, vì kích thước của em phải theo mẩu của cty , không giống kiểu này.

 

*

Cái này là VBA nhưng dùng tiện hơn lisp

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

cái này em không biết xài

làm theo hướng dẫn nhưng nó báo thế này , A xem và chỉ giúp nhé, cài này thấy hay vì chỉ thay đổi tại 1 vị trí cố định

Hình 1

Hình 2

 

 

*

anh này đã giúp em giảm bớt được 99% thời gian làm công việc này

 

1% là em phải vào cad nhập thêm chiều dài thanh sắt là xong

 

Còn 1% này anh giúp được không vậy, không thì cũng rất ok rồi

Em dùng Cad 2005, excel 2003

 

 

***********************

Em xin hỏi tiếp :

 

Bước tiếp theo là công nhân sẽ lấy những kích thước lỗ và nhập vào máy cnc để máy đụt lỗ tự động .

nếu vẽ đúng thực tế thì chỉ cần dùng phần mềm CAM chuyển qua mã NC là có thể xong việc .

các anh/chi có thể giúp đưa các số này vào 1 file có dạng như sau :

 

X20.0,Y50;

X300,Y50;

X500,Y50;

X715,Y50;

X1120,Y50;

X6881.5,Y50;

X7286.5,Y50;

X7501.5,Y50;

X7701,Y50;

X7980,Y50;

 

 

Bản vẽ giấy thì đưa khách hàng phê duyệt, bản vẽ cad thì chuyển xuống xưởng ( không chuyển được các file khác)

vì bộ phận chuyển là người quản lý , nên em không thể chuyển file excel cũng như các file dạng khác ,và usb thì bị khóa tất cả.

vì thế có cách nào từ cad mà công nhân có thể lấy ra tạo thành file như trên không.

 

Đúng là rắc rối ,nhưng nhập gia thì tùy tục thôi các anh/chị, đó là theo iso đấyyyyyyyyyyyyyyyyyyỹ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
... đã giúp em giảm bớt được 99% thời gian làm công việc này

1% là em phải vào cad nhập thêm chiều dài thanh sắt là xong

 

Còn 1% này anh giúp được không vậy, không thì cũng rất ok rồi

Em dùng Cad 2005, excel 2003

***********************

Em xin hỏi tiếp :

 

Bước tiếp theo là công nhân sẽ lấy những kích thước lỗ và nhập vào máy cnc để máy đụt lỗ tự động .

nếu vẽ đúng thực tế thì chỉ cần dùng phần mềm CAM chuyển qua mã NC là có thể xong việc .

các anh/chi có thể giúp đưa các số này vào 1 file có dạng như sau :

Bản vẽ giấy thì đưa khách hàng phê duyệt, bản vẽ cad thì chuyển xuống xưởng ( không chuyển được các file khác)

vì bộ phận chuyển là người quản lý , nên em không thể chuyển file excel cũng như các file dạng khác ,và usb thì bị khóa tất cả.

vì thế có cách nào từ cad mà công nhân có thể lấy ra tạo thành file như trên không.

 

Đúng là rắc rối ,nhưng nhập gia thì tùy tục thôi các anh/chị, đó là theo iso đấyyyyyyyyyyyyyyyyyyỹy

Nói thật tình, mình không thích cái bản vẽ không đúng kích thước và tỷ lệ của bạn. Hơn nữa, cũng chưa rõ mình hiểu như vậy có đúng ý đồ của bạn hay không nên chỉ dừng lại ở mức độ đó. Trong chuỗi công việc bạn cần, cái lôi thôi nhất là đọc được dữ liệu từ file *.xls. Có được dữ liệu rồi, tất cả các yêu cầu trên đều thực hiện được, kể cả việc xuất ra file NC hoàn chỉnh, có thể nối thẳng từ computer của bạn đến cái máy đột qua cổng giao tiếp (nếu hệ thống Computer - CNC Machine của bạn có tính năng này) và làm cho nó chạy ầm ầm, chẳng cần đến bất kỳ phần mềm CAM nào khác! Tất nhiên, để làm được việc này, bạn cần phải cho biết máy đột CNC của bạn dùng hệ điều khiển nào, kèm theo bảng hướng dẫn các mã M, mã G theo catalog của nó. Ngoài ra, cũng xin nói rõ, một chương trình như vậy sẽ không free vì nó cũng khá tốn công sức, phải có chút thù lao để tác giả tái tạo... sức lao động!

 

Trên diễn đàn này, mình có thể giúp bạn hoàn chỉnh chương trình trên với các tính năng sau:

1. Đọc data từ *.xls

2. Vẽ hoàn chỉnh cái thanh sắt có lỗ ở 2 dạng: dạng chính xác, đúng kích thước thực tế và dạng... "xạo" để đưa cho khách hàng xem! Dạng thật thì không thành vấn đề, còn dạng "xạo" thì bạn phải cho biết "quy luật xạo". Chương trình nó không biết đến khái niệm "toạ độ x muốn vẽ sao cũng được"!

3. Ghi kích thước theo quy cách bạn muốn

4. Xuất file dạng X20.0,Y50.0;...

 

Bạn đừng giải thích dài dòng, mọi yêu cầu với chương trình nên mô tả một cách ngắn gọn và rõ ràng theo sơ đồ:

Input -> Processing -> Output

Hãy post lên cái bạn có (Input) và kết quả bạn cần (Output) bằng các file ví dụ cụ thể (nhưng phải mang tính tổng quát), có thể kèm theo vài dòng chú thích ngắn gọn là OK.

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

PP vừa viết xong 1 bài thì tự nhiên bị re set, mất tất cả. Thôi đành viết lại vậy. -_-

Đêm qua nhân đọc topic này mà PP nghỉ ra 1 idea này.

Mục đích là để xuất các bv có dạng thanh dùng trong các tháp thép có cả hàng trăm thanh một cách nhanh chóng.

Cách dùng Excel+LISP để xuất bv như sau:

1. Trong bảng Excel có 2 sheets.

2. Input các infomation của bv vào sheet Info.

3. Input các dimension vào sheet Dim.

4. Sheet Info được link với sheet Info.

5. Dùng VBA để chuyển sheet Info thành dạng text .csv

6. Tạo templates các khung tên cho bv CAD.

7. Tạo các dạng thanh với các số lổ khac nhau, bỏ vào pallette.

8. Mở bv template.

9. Drag dạng thanh nào muốn có từ pallette vào model.

10. Save bv theo filename đã đặt trong bảng Excel.

11. Mở lại bv, LISP sẽ tự động thay các data từ Excel vào CAD

12. Save lại, in bv hoặc send. Done

13. Lặp lại bước 8 cho bv mới.

14. Tạo 1 sheet set manager để tiện việc quản lý tất cả các bv.

PP sẽ thực hiện thử xem sao.

Có 1 việc cần các Bác giúp: Làm sao để thay các số của dim thành các Atribute?

Không lẽ phải Explode dim, xoá số rồi đặt Atttribue vào thế? Nhờ các Bác cho ý kiến. Thanks you

P/S: Nếu làm được như trên thì chắc không cần Drafter để vẽ nữa rùi!

 

tw3le6.jpg

 

w845.png

 

 

tw2uo3.jpg

 

w1005.png

 

 

tw1qr0.jpg

 

w424.png

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

Nhờ mọi nguời viết một bài về cách đọc và tách dữ liệu từ một file excel (có ví dụ kèm theo). Khi đọc hết dữ liệu thì dùng thuật toán như thế nào để trương trình ngừng đọc....

Vừa rồi có đọc đoạn lisp của anh ssg viết để lấy số liệu từ excel mà thấy khó hiểu quá, anh ssg toàn dùng tiếng anh thôi à....

ví dụ dữ liệu trong excel như sau:

A1 B1 C1 D1 E1 F1

A2 B2 D2 E2 F2

A3 B3 C3 D3 E3

A4 B4

D5 E5 F5

Mong các cao thủ chỉ giúp, cảm ơn mọi người 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
Nhờ mọi nguời viết một bài về cách đọc và tách dữ liệu từ một file excel (có ví dụ kèm theo). Khi đọc hết dữ liệu thì dùng thuật toán như thế nào để trương trình ngừng đọc....

Vừa rồi có đọc đoạn lisp của anh ssg viết để lấy số liệu từ excel mà thấy khó hiểu quá, anh ssg toàn dùng tiếng anh thôi à....

ví dụ dữ liệu trong excel như sau:

A1 B1 C1 D1 E1 F1

A2 B2 D2 E2 F2

A3 B3 C3 D3 E3

A4 B4

D5 E5 F5

Mong các cao thủ chỉ giúp, cảm ơn mọi người nhiều

Góp ý:

Không nên lập quá nhiều topic cho các vấn đề có nội dung giống nhau hoặc tương tự nhau. Bạn thắc mắc về code của ssg sao không hỏi ngay ở đây mà đi lập topic mới? Ssg đã move bài của bạn về đây.

 

Topic này do bạn caothang lập ra nhưng có vẻ có nhiều người quan tâm nên ssg đã đổi tên nó cho phù hợp hơn:

Kết hợp Excel - AutoLisp - AutoCAD

 

Phát huy sức mạnh của 3 trong 1!

 

Xin có vài dòng giải thích về việc đổi tên này:

 

1. Đã vào CadViet, dù thuộc nhiều ngành khác nhau, ai cũng biết AutoCAD có vai trò quan trọng như thế nào trong công việc chuyên môn của mình

2. Phần mềm MS Excel cũng vậy, là bạn đồng hành thân thiết của nhiều người, phạm vi ứng dụng không chừng còn rộng rãi hơn cả AutoCAD

3. AutoLisp đã chứng tỏ được sức mạnh của nó thông qua một số lượng khổng lồ các chương trình ứng dụng mà các members đã post lên diễn đàn

 

Cả 3 công cụ trên, nếu biết cách kết hợp chúng lại một cách chặt chẽ sẽ tạo nên được rất nhiều ứng dụng thật sự hiệu quả, giúp chúng ta làm việc nhẹ nhàng hơn, thoải mái hơn, năng suất và chất lượng công việc sẽ tăng lên đến mức đáng kinh ngạc đối với nhiều người.

 

Chúng ta đã từng có topic "AutoCAD với Excel", cũng đã có nhiều ý kiến rất hay, nhưng thực sự là nó đã bị "loãng" đi rất nhiều vì giữa AutoCAD và Excel có khá nhiều mối quan hệ:

- Copy bảng Excel và paste vào Cad

- Copy hình từ Cad paste qua Excel

- Nhúng trực tiếp bảng Excel vào Cad đời mới

- Tạo các dòng lệnh trong cell của Excel, copy va paste qua Cad

- Dùng VBA để giao tiếp giữa Excel và Cad

- v.v...

 

Mỗi phương pháp kể trên đều có cái hay (cũng như cái dở) riêng, có phạm vi ứng dụng và những hạn chế riêng. Ssg không có ý so sánh hay luận bàn về vấn đề đó. Ý ssg là topic này được dành riêng để các bạn thảo luận về sức mạnh của "bộ ba" nói trên, như chính tên gọi của topic.

 

Riêng thắc mắc của bạn ntson, ssg sẽ giải thích cặn kẽ. Nhưng trước hết, xin phép hỏi lại bạn một câu: bạn có biết cách lấy data từ 1 file *.txt hoặc *.csv để phục vụ cho chương trình lisp của mình hay không?

  • 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ó 1 việc cần các Bác giúp: Làm sao để thay các số của dim thành các Atribute?

Không lẽ phải Explode dim, xoá số rồi đặt Atttribue vào thế? Nhờ các Bác cho ý kiến. Thanks you

Chưa hiểu ý! Bạn có thể giải thích rõ hơn không?

Chia sẻ bài đăng này


Liên kết tới bài đăng
Chia sẻ trên các trang web khác
Chưa hiểu ý! Bạn có thể giải thích rõ hơn không?

PP muốn dùng LISP để thay con số của dim thành 1 attribute. Mục đích để LISP thay các số từ file .csv

Thí dụ dim của kích thuớc đầu là 40 (xem bv đã post ở bài trên), LISP sẽ thay số 40 thành 1 attribute Lh1 vv..

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
PP muốn dùng LISP để thay con số của dim thành 1 attribute. Mục đích để LISP thay các số từ file .csv

Thí dụ dim của kích thuớc đầu là 40 (xem bv đã post ở bài trên), LISP sẽ thay số 40 thành 1 attribute Lh1 vv..

Ssg có mấy ý kiến này:

 

1. Lisp có thể tạo mới hoặc modify các đối tượng dimensions, không cần (và cũng không thể) thay số của dim bằng attribute

2. Ssg chưa rõ hình dáng, quy cách cũng như số chủng loại các thanh thép của bạn nhưng cảm thấy cách làm theo idea của bạn hơi dài dòng.

3. Nếu toàn bộ chúng đều có dạng như cái image "BAN VE GIA CONG" mà bạn đã post ở trên thì rất đơn giản, lisp có thể tạo ra tất cả chúng từ 1 file *.xls duy nhất, và chỉ sử dụng 1 sheet.

Trong file *.xls, bạn tổ chức data như sau (các con số là ví dụ như hình vẽ của bạn):

 

BarData.jpg

 

Trong đó số lượng lỗ (n) trên các thanh có thể khác nhau và là một số tuỳ ý.

 

Bạn chỉ cần làm các việc:

1. Trong Excel: Nhập số liệu thô vào file *.xls, có thể gán công thức để tính các giá trị của các cells còn lại theo chuyên môn của bạn. Chương trình lisp không quan tâm đến việc đó, nó chỉ đọc values trong các cells để thực thi.

 

2. Trong AutoCAD:

- Chỉ định file *.xls

- Chỉ định ID (1, 2, 3...)

Lisp có khả năng thực hiện từ A đến Z như hình vẽ bạn đã post.

  • 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

Bác Ssg chưa hiểu toàn bộ ý của PP.

PP muốn là sẽ xuất ra các bản vẽ hoàn chỉnh ngoài cái hình "ban ve gia cong" post ở trên thì còn chứa mọi thông tin của 1 bản vẽ chi tiết cần phải có như khung tên, tên project, chi tiết gia công, yêu cầu kỹ thuật, BOM, chi tiết người vẽ, duyệt, kiểm tra, khách hàng, thời gian, liệt kê mọi chi tiết các revisions liên quan vv... Bời vậy phải cần có sheet Info, để điền các data này sau đó LISP mới đọc và input tự động vào bv. (Lợi ích của bảng Excel này còn giúp người quản lý chỉ cần mở bảng này ra xem là biết mọi information của mọi bv, Excel cho phép copy các text giống nhau trong các bv bằng 1 vài cái "click", giúp cho Drafter khỏi phải đánh text trong bv). Còn sheet Dim thì chắc chắn phải giống như bảng thí dụ của Ssg rồi.

Thí dụ như hình tháp thép trên, có cả trăm bv chi tiết ( mỗi chi tiết phải vẽ trong 1 bv). Drafter trước tiên sẽ thực hiện bước 2 và 3 là input database, xong thì click vào lệnh VBA để chuyển thành 1 file text (bước 5). Mở AutoCAD rồi bắt đầu thực hiện các bước 8,9 và 10 cho mổi bv cho đến khi có đủ số bv như đã input trong bảng Excel. Bây giờ Drafter chỉ việc mở lại từng bv, lúc này LISP sẽ tự động update các data từ bảng Excel vào bv, bước 12- save lại bv rồi gởi đi. (Bước 7 đã tạo sẳn library các thanh khác loại rồi)

Ý thứ 2 của Ssg không cần phải thực hiện gì cả vì bước 10 đã save cho mỗi bv 1 filename có ID giống như trong bảng Excel rồi, bước 11- Mở lại bv, LISP sẽ tự động thay các data từ Excel vào 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
Bác Ssg chưa hiểu toàn bộ ý của PP.

PP muốn là sẽ xuất ra các bản vẽ hoàn chỉnh ngoài cái hình "ban ve gia cong" post ở trên thì còn chứa mọi thông tin của 1 bản vẽ chi tiết cần phải có như khung tên, tên project, chi tiết gia công, yêu cầu kỹ thuật, BOM, chi tiết người vẽ, duyệt, kiểm tra, khách hàng, thời gian, liệt kê mọi chi tiết các revisions liên quan vv... Bời vậy phải cần có sheet Info, để điền các data này sau đó LISP mới đọc và input tự động vào bv. (Lợi ích của bảng Excel này còn giúp người quản lý chỉ cần mở bảng này ra xem là biết mọi information của mọi bv, Excel cho phép copy các text giống nhau trong các bv bằng 1 vài cái "click", giúp cho Drafter khỏi phải đánh text trong bv). Còn sheet Dim thì chắc chắn phải giống như bảng thí dụ của Ssg rồi.

Thí dụ như hình tháp thép trên, có cả trăm bv chi tiết ( mỗi chi tiết phải vẽ trong 1 bv). Drafter trước tiên sẽ thực hiện bước 2 và 3 là input database, xong thì click vào lệnh VBA để chuyển thành 1 file text (bước 5). Mở AutoCAD rồi bắt đầu thực hiện các bước 8,9 và 10 cho mổi bv cho đến khi có đủ số bv như đã input trong bảng Excel. Bây giờ Drafter chỉ việc mở lại từng bv, lúc này LISP sẽ tự động update các data từ bảng Excel vào bv, bước 12- save lại bv rồi gởi đi. (Bước 7 đã tạo sẳn library các thanh khác loại rồi)

Ý thứ 2 của Ssg không cần phải thực hiện gì cả vì bước 10 đã save cho mỗi bv 1 filename có ID giống như trong bảng Excel rồi, bước 11- Mở lại bv, LISP sẽ tự động thay các data từ Excel vào CAD.

Ssg vẫn hiểu trong 1 bản vẽ, ngoài các hình vẽ chính và dim, còn có đủ các thứ "linh tinh" khác như bạn nêu (đó là công việc hàng ngày của ssg mà). Tuy nhiên, cách làm của mỗi Cty thường không giống nhau, tuỳ thuộc vào nhiều yếu tố: quy định, thói quen, quy mô của project, sản lượng của mặt hàng... Nhưng dù là kiểu gì đi nữa, mọi thông tin (infomation) đều có thể tổ chức thành dữ liệu (data) và dùng chương trình để xử lý tự động. Cách thức lập trình sẽ quyết định cách thức tổ chức data.

Theo nhận định của ssg, với yêu cầu như bạn đã nêu, mỗi project chỉ cần 1 file *.xls, dữ liệu có thể nằm ở 1 sheet hay nhiều sheet tuỳ thuộc cách thức tổ chức quản lý. Thật ra thì ssg cũng chưa hiểu hết cách làm của Cty bạn, điều ssg muốn nói ở đây là:

1. Cách của bạn phải làm 2 lần: 1 lần tạo bản vẽ và 1 lần update. Tại sao không gom lại và "chơi" luôn một lần?

2. Lisp có khả năng chuyển tải trực tiếp mọi data từ file *.xls vào *.dwg và ngược lại, không cần bất kỳ một sự trợ giúp nào khác (kể cả VBA), cũng không cần phải qua file trung gian *.csv hoặc *.txt

 

Nếu không vướng vấn đề "bí mật business", bạn có thể post lên các file ví dụ có liên quan (*.xls, *.dwg, *.dwt...) của 1 project nào đó được không? Một project có thể có hàng trăm, hàng ngàn chi tiết khác nhau nhưng bạn chỉ cần đưa lên năm bảy cái để tượng trưng là đủ hiể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
Ssg vẫn hiểu trong 1 bản vẽ, ngoài các hình vẽ chính và dim, còn có đủ các thứ "linh tinh" khác như bạn nêu (đó là công việc hàng ngày của ssg mà). Tuy nhiên, cách làm của mỗi Cty thường không giống nhau, tuỳ thuộc vào nhiều yếu tố: quy định, thói quen, quy mô của project, sản lượng của mặt hàng... Nhưng dù là kiểu gì đi nữa, mọi thông tin (infomation) đều có thể tổ chức thành dữ liệu (data) và dùng chương trình để xử lý tự động. Cách thức lập trình sẽ quyết định cách thức tổ chức data.

Theo nhận định của ssg, với yêu cầu như bạn đã nêu, mỗi project chỉ cần 1 file *.xls, dữ liệu có thể nằm ở 1 sheet hay nhiều sheet tuỳ thuộc cách thức tổ chức quản lý. Thật ra thì ssg cũng chưa hiểu hết cách làm của Cty bạn, điều ssg muốn nói ở đây là:

1. Cách của bạn phải làm 2 lần: 1 lần tạo bản vẽ và 1 lần update. Tại sao không gom lại và "chơi" luôn một lần?

2. Lisp có khả năng chuyển tải trực tiếp mọi data từ file *.xls vào *.dwg và ngược lại, không cần bất kỳ một sự trợ giúp nào khác (kể cả VBA), cũng không cần phải qua file trung gian *.csv hoặc *.txt

 

Nếu không vướng vấn đề "bí mật business", bạn có thể post lên các file ví dụ có liên quan (*.xls, *.dwg, *.dwt...) của 1 project nào đó được không? Một project có thể có hàng trăm, hàng ngàn chi tiết khác nhau nhưng bạn chỉ cần đưa lên năm bảy cái để tượng trưng là đủ hiểu.

Trước tiên là PP xin cảm ơn bác Ssg đã rất quan tâm trao đổi về đề tài này.

Như đã nói trên, đây mới chỉ là 1 idea của PP, vả lại cũng cần phải nói trước là công việc của PP (và cty) không phải là detailing các chi tiết trên. Muốn detailing thì cty thuê thợ bên ngoài dùng Tekla để model và cung cấp bv luôn. Idea này chỉ dùng để hổ trợ các bác Drafter về việc xuất bv chi tiết của các tháp thép hoặc các công việc khác liên quan đến các thanh và lỗ...

Trong link này có 1 bv 3D của tháp thép, 1 bv chi tiết thanh để làm mẫu, các information dùng để detailing.

http://www.cadviet.com/upfiles/Tower_DS.zip

Như PP đã nêu trong bước 14 là tạo 1 sheet set manager để tiện việc quản lý tất cả các bv. PP đã làm thử như hình đính kèm trong link.

Vì để dể dàng quản lý hàng trăm bv, các bv chi tiết nên save vảo mỗi folder cho từng đoạn tháp thép. Sheet set manager sẽ giúp việc mở các bv cần xem một cách tiện lợi và nhanh chóng.

Cái tháp DG20 có khoảng 500 bản vẽ đó bác Ssg.

PP muốn biết làm sao để "gom lại và "chơi" luôn một lần?". Xin bác viết cho đoạn LISP đó nhé. Thanks you

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
Góp ý:

Không nên lập quá nhiều topic cho các vấn đề có nội dung giống nhau hoặc tương tự nhau. Bạn thắc mắc về code của ssg sao không hỏi ngay ở đây mà đi lập topic mới? Ssg đã move bài của bạn về đây.

 

Topic này do bạn caothang lập ra nhưng có vẻ có nhiều người quan tâm nên ssg đã đổi tên nó cho phù hợp hơn:

Kết hợp Excel - AutoLisp - AutoCAD

 

Phát huy sức mạnh của 3 trong 1!

 

Xin có vài dòng giải thích về việc đổi tên này:

 

1. Đã vào CadViet, dù thuộc nhiều ngành khác nhau, ai cũng biết AutoCAD có vai trò quan trọng như thế nào trong công việc chuyên môn của mình

2. Phần mềm MS Excel cũng vậy, là bạn đồng hành thân thiết của nhiều người, phạm vi ứng dụng không chừng còn rộng rãi hơn cả AutoCAD

3. AutoLisp đã chứng tỏ được sức mạnh của nó thông qua một số lượng khổng lồ các chương trình ứng dụng mà các members đã post lên diễn đàn

 

Cả 3 công cụ trên, nếu biết cách kết hợp chúng lại một cách chặt chẽ sẽ tạo nên được rất nhiều ứng dụng thật sự hiệu quả, giúp chúng ta làm việc nhẹ nhàng hơn, thoải mái hơn, năng suất và chất lượng công việc sẽ tăng lên đến mức đáng kinh ngạc đối với nhiều người.

 

Chúng ta đã từng có topic "AutoCAD với Excel", cũng đã có nhiều ý kiến rất hay, nhưng thực sự là nó đã bị "loãng" đi rất nhiều vì giữa AutoCAD và Excel có khá nhiều mối quan hệ:

- Copy bảng Excel và paste vào Cad

- Copy hình từ Cad paste qua Excel

- Nhúng trực tiếp bảng Excel vào Cad đời mới

- Tạo các dòng lệnh trong cell của Excel, copy va paste qua Cad

- Dùng VBA để giao tiếp giữa Excel và Cad

- v.v...

 

Mỗi phương pháp kể trên đều có cái hay (cũng như cái dở) riêng, có phạm vi ứng dụng và những hạn chế riêng. Ssg không có ý so sánh hay luận bàn về vấn đề đó. Ý ssg là topic này được dành riêng để các bạn thảo luận về sức mạnh của "bộ ba" nói trên, như chính tên gọi của topic.

 

Riêng thắc mắc của bạn ntson, ssg sẽ giải thích cặn kẽ. Nhưng trước hết, xin phép hỏi lại bạn một câu: bạn có biết cách lấy data từ 1 file *.txt hoặc *.csv để phục vụ cho chương trình lisp của mình hay không?

Cảm ơn ssg đã trả lời, việc lấy dữ liệu từ *.txt ntsơn đã lấy nhiều, có trường hợp các dòng dữ lệu thay đổi liên tục nhưng vẫn có quy luật. Tuy nhiên thuật toán lấy dữ lệu vẫn còn thủ công. Ví dụ khi kết thúc tệp thì phải có 1 ký tự đặc biệt nào đó, khi các dòng có dữ liệu thay đổi (dòng 1 có 2 dữ liệu cần lấy, dòng 2 có 3 dữ liệu cần lấy...) thì phải thêm 1 ký tự trống vào cuối dòng 1 (hoặc n ký tự trống), số ký tự phụ thuộc vào số dữ liệu cần lấy trên 1 dòng nhiều nhất....Vì năng lực có hạn, ntson không nghĩ được thuật toán khả thi hơn.

Còn file *.csv ntson trưa tiếp xúc bao giờ.

Mong ssg trả 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
Wow wow wow , được nhiều hồi âm giúp đỡ quá , Em cảm ơn rất nhiều

 

*

cài này em tạm lưu để dành sử dụng khi khác, vì kích thước của em phải theo mẩu của cty , không giống kiểu này.

 

*

cái này em không biết xài

làm theo hướng dẫn nhưng nó báo thế này , A xem và chỉ giúp nhé, cài này thấy hay vì chỉ thay đổi tại 1 vị trí cố định

Hình 1

Hình 2

*

anh này đã giúp em giảm bớt được 99% thời gian làm công việc này

 

1% là em phải vào cad nhập thêm chiều dài thanh sắt là xong

 

Còn 1% này anh giúp được không vậy, không thì cũng rất ok rồi

Em dùng Cad 2005, excel 2003

 

Đó là vì chế độ security ở mức cao.

Vào Tools->Marcro->security và chọn mức medium

Sau đó khi mở file thì chọn enable macro là chạy được

Nếu bạn đưa bản vẽ hoàn chỉnh, tôi sẽ giúp 100% thời gian làm công việc này

Dĩ nhiên là phải làm chi tiết bên excel rồ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
Trước tiên là PP xin cảm ơn bác Ssg đã rất quan tâm trao đổi về đề tài này.

Như đã nói trên, đây mới chỉ là 1 idea của PP, vả lại cũng cần phải nói trước là công việc của PP (và cty) không phải là detailing các chi tiết trên. Muốn detailing thì cty thuê thợ bên ngoài dùng Tekla để model và cung cấp bv luôn. Idea này chỉ dùng để hổ trợ các bác Drafter về việc xuất bv chi tiết của các tháp thép hoặc các công việc khác liên quan đến các thanh và lỗ...

Trong link này có 1 bv 3D của tháp thép, 1 bv chi tiết thanh để làm mẫu, các information dùng để detailing.

http://www.cadviet.com/upfiles/Tower_DS.zip

Như PP đã nêu trong bước 14 là tạo 1 sheet set manager để tiện việc quản lý tất cả các bv. PP đã làm thử như hình đính kèm trong link.

Vì để dể dàng quản lý hàng trăm bv, các bv chi tiết nên save vảo mỗi folder cho từng đoạn tháp thép. Sheet set manager sẽ giúp việc mở các bv cần xem một cách tiện lợi và nhanh chóng.

Cái tháp DG20 có khoảng 500 bản vẽ đó bác Ssg.

PP muốn biết làm sao để "gom lại và "chơi" luôn một lần?". Xin bác viết cho đoạn LISP đó nhé. Thanks you

Các file bạn up lên không đủ thông tin cần thiết để lập trình! Các file *.jpg và file 3d của bạn chỉ giúp được cái nhìn tổng quan, chưa nói lên điều gì cả, có chăng là một vài nhận định chung nhất về tính khả thi của ý tưởng cũng như định hướng chung chung về lập trình. Để có chương trình, cần phải mô tả chi tiết hơn, cụ thể "đến từng sợi tóc". Bạn phải cung cấp cái Input và Output chính xác. Cụ thể:

- Input: file *.xls và các file *.dwg, *.dwt có liên quan trong library

- Output: khoảng 5 đến 10 file *.dwg khác nhau và mang tính chất điển hình trong toàn bộ project của bạn

Chương trình sẽ lấy data từ cái Input, xử lý và tạo ra cái Output như bạn đã post

 

Lưu ý:

Phải là các file y chang như bạn thực hiện thật sự cho Cty, không thiếu bất cứ chi tiết nhỏ nào chứ không phải các file ví dụ chung chung. Rất nhiều thông tin chứa trong file, có khi bạn cho là không quan trọng, không cần đề cập đến, nhưng chúng rất quan trọng đối với người lập trình. Tóm lại, các file tự chúng sẽ nói lên nhiều điều, bạn không cần giải thích dài dòng.

 

Nếu bạn thấy vướng vấn đề security của Cty thì thôi, không phải miễn 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
Cảm ơn ssg đã trả lời, việc lấy dữ liệu từ *.txt ntsơn đã lấy nhiều, có trường hợp các dòng dữ lệu thay đổi liên tục nhưng vẫn có quy luật. Tuy nhiên thuật toán lấy dữ lệu vẫn còn thủ công. Ví dụ khi kết thúc tệp thì phải có 1 ký tự đặc biệt nào đó, khi các dòng có dữ liệu thay đổi (dòng 1 có 2 dữ liệu cần lấy, dòng 2 có 3 dữ liệu cần lấy...) thì phải thêm 1 ký tự trống vào cuối dòng 1 (hoặc n ký tự trống), số ký tự phụ thuộc vào số dữ liệu cần lấy trên 1 dòng nhiều nhất....Vì năng lực có hạn, ntson không nghĩ được thuật toán khả thi hơn.

Còn file *.csv ntson trưa tiếp xúc bao giờ.

Mong ssg trả lời.

 

Trước hết, cần nhìn nhận vấn đề một cách tổng quát như sau:

Cả 3 trình Excel, Lisp và Acad đều làm việc với data (dữ liệu). Mỗi công cụ có một cách thức riêng của mình để xử lý data, dùng cái này rất khó (hoặc không thể) can thiệp vào "công việc nội bộ" của cái kia được. Biện pháp hiệu quả để thực hiện mối liên kết giữa 3 công cụ nói trên là: chỉ cần đọc hiểu data của nhau theo một chuẩn chung nào đó. Khi đã hiểu rồi thì tự xử lý theo cách riêng của mình.

Ví dụ: Bạn không thể biết Acad tổ chức, quản lý data của các đối tượng trong bản vẽ *.dwg như thế nào (trừ khi bạn là nhân viên lập trình của Autodesk), nhưng bạn có thể truy cập được chúng bằng hàm entget. Kết quả bạn nhận được là một list, chứa đủ các thông tin bạn cần, sau đó tuỳ nghi xử lý và sử dụng chúng cho nhiều mục đích khác nhau.

Bạn hãy làm tương tự như vậy với các file dữ liệu của excel: *.xls, *.csv, *.txt (bản chất các file này ssg sẽ phân tích sau), nghĩa là đọc tất tần tật những gì có thể đọc được trong file, convert (chuyển đổi) chúng sang dạng list (kiểu dữ liệu cơ bản, có thể nói là "sở trường" của ngôn ngữ Lisp). Có list rồi, bạn có thể bày ra đủ "trò phù thuỷ" từ chúng vì ngôn ngữ Lisp cung cấp rất nhiều function (hàm) thao tác với list.

 

Về các loại file data đã đề cập trên, bạn hãy làm các thử nghiệm sau:

 

1. Tạo và save file Data01.xls như thế này:

 

xls.jpg

 

2. Saveas -> trong listbox Save as type, bạn chọn "Text (Tab delimited) (*.txt)"

Đây là kiểu file dữ liệu, phân biệt các field bằng dấu tab. Khi bạn save dạng này, trình Excel sẽ cảnh báo "Dạng file này không thể lưu được nhiều sheet". Bạn cứ mặc nó, phớt lờ bấm "OK". Nó sẽ báo tiếp "Dạng này sẽ có một số tính năng không khả dụng". Bạn cũng kệ xác nó, tỉnh bơ bấm "Yes" -> bạn đã có 1 file Data01.txt theo kiểu Tab delimited lưu trên đĩa.

 

3. Làm tương tự bước 2, với dạng "CSV (Comma delimited) (*.csv)" -> bạn sẽ có file Data01.csv

 

4. Thoát Excel. Lúc này nó lại hỏi "Do you want to save...?", bạn hãy bấm "No" (hỏi gì mà hỏi lắm không biết!)

 

5. Mở Notepad, trong "File of type" chọn "All File", open file *.txt lúc nãy, bạn sẽ thấy như sau:

 

txt.jpg

 

Dùng các phím mũi tên Right-Left di chuyển con trỏ, bạn sẽ thấy các thành phần cách nhau bằng 1 dấu tab. Với dạng file này, cách ssg lấy dữ liệu như sau:

- Dùng read-line đọc một mạch từ đầu đến cuối cho đến EOF (End Of File). Chỗ này lưu ý bạn, trong file text, không cần phải đặt dầu hiệu kết thúc vì trong bản thân mỗi file tự nó đã có dầu hiệu EOF. Hệ điều hành hoặc các ứng dụng đều căn cứ vào dấu hiệu này để kết thúc thao tác đọc file. Bạn không nhìn thấy EOF vì các trình Editor (soạn thảo văn bản) không hiển thị nó, nhưng hàm read-line thì biết, khi gặp EOF, nó return (hoàn trả) giá trị nil.

- Trong quá trình đọc, sau mỗi dòng, bạn có thể dùng append để ghi nhận thông tin từng dòng vào một list

- Kết thúc quá trình, bạn sẽ nhận đuợc 1 list chứa toàn bộ nội dung của file Data01.txt. Mỗi phần tử của list là 1 string (chuỗi ký tự). Mỗi string sẽ chứa các dữ liệu bạn cần, được phân biệt bằng dầu tab ("\t"). Đến đây có lẽ bạn đã biết cách tách ra cái mình cần?

- Ssg đã xây dựng sẵn hàm FtoL, convert trực tiếp từ file *.txt kiểu như trên sang List 2 cấp (mỗi phần tử của list cấp 1 là 1 list cấp 2, mỗi phần tử của list cấp 2 chính là dữ liệu của 1 cell trong bảng). Bạn có thể vào chương trình Mechanical CadViet (trong box CadViet Utility) để tham khảo.

 

6. Làm tương tự bước 5 với file Data01.csv, bạn sẽ thấy như sau:

 

csv01.jpg

 

Nó không ngay hàng thẳng lối, nhưng cung cách tổ chức giống y chang như với file Data01.txt, chỉ khác ở chỗ dấu tab được thay bằng dấu phẩy. Hoàn toàn tương tự như trên, bạn cũng tách ra được các dữ liệu, cái nào ra cái đó như ý muốn dựa vào dấu phẩy ngăn cách.

 

Bạn hãy tự làm và tự chiêm nghiệm với 2 kiểu database trên. Khi bạn đã thông suốt với *.txt và *.csv, ssg sẽ giới thiệu kiểu *.xls (kiểu này lôi thôi hơn, nếu không thông 2 kiểu trên e rằng hơi khó trình bày).

 

Hẹn gặp 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
Trước hết, cần nhìn nhận vấn đề một cách tổng quát như sau:

Cả 3 trình Excel, Lisp và Acad đều làm việc với data (dữ liệu). Mỗi công cụ có một cách thức riêng của mình để xử lý data, dùng cái này rất khó (hoặc không thể) can thiệp vào "công việc nội bộ" của cái kia được. Biện pháp hiệu quả để thực hiện mối liên kết giữa 3 công cụ nói trên là: chỉ cần đọc hiểu data của nhau theo một chuẩn chung nào đó. Khi đã hiểu rồi thì tự xử lý theo cách riêng của mình.

Ví dụ: Bạn không thể biết Acad tổ chức, quản lý data của các đối tượng trong bản vẽ *.dwg như thế nào (trừ khi bạn là nhân viên lập trình của Autodesk), nhưng bạn có thể truy cập được chúng bằng hàm entget. Kết quả bạn nhận được là một list, chứa đủ các thông tin bạn cần, sau đó tuỳ nghi xử lý và sử dụng chúng cho nhiều mục đích khác nhau.

Bạn hãy làm tương tự như vậy với các file dữ liệu của excel: *.xls, *.csv, *.txt (bản chất các file này ssg sẽ phân tích sau), nghĩa là đọc tất tần tật những gì có thể đọc được trong file, convert (chuyển đổi) chúng sang dạng list (kiểu dữ liệu cơ bản, có thể nói là "sở trường" của ngôn ngữ Lisp). Có list rồi, bạn có thể bày ra đủ "trò phù thuỷ" từ chúng vì ngôn ngữ Lisp cung cấp rất nhiều function (hàm) thao tác với list.

 

Về các loại file data đã đề cập trên, bạn hãy làm các thử nghiệm sau:

 

1. Tạo và save file Data01.xls như thế này:

 

xls.jpg

 

2. Saveas -> trong listbox Save as type, bạn chọn "Text (Tab delimited) (*.txt)"

Đây là kiểu file dữ liệu, phân biệt các field bằng dấu tab. Khi bạn save dạng này, trình Excel sẽ cảnh báo "Dạng file này không thể lưu được nhiều sheet". Bạn cứ mặc nó, phớt lờ bấm "OK". Nó sẽ báo tiếp "Dạng này sẽ có một số tính năng không khả dụng". Bạn cũng kệ xác nó, tỉnh bơ bấm "Yes" -> bạn đã có 1 file Data01.txt theo kiểu Tab delimited lưu trên đĩa.

 

3. Làm tương tự bước 2, với dạng "CSV (Comma delimited) (*.csv)" -> bạn sẽ có file Data01.csv

 

4. Thoát Excel. Lúc này nó lại hỏi "Do you want to save...?", bạn hãy bấm "No" (hỏi gì mà hỏi lắm không biết!)

 

5. Mở Notepad, trong "File of type" chọn "All File", open file *.txt lúc nãy, bạn sẽ thấy như sau:

 

txt.jpg

 

Dùng các phím mũi tên Right-Left di chuyển con trỏ, bạn sẽ thấy các thành phần cách nhau bằng 1 dấu tab. Với dạng file này, cách ssg lấy dữ liệu như sau:

- Dùng read-line đọc một mạch từ đầu đến cuối cho đến EOF (End Of File). Chỗ này lưu ý bạn, trong file text, không cần phải đặt dầu hiệu kết thúc vì trong bản thân mỗi file tự nó đã có dầu hiệu EOF. Hệ điều hành hoặc các ứng dụng đều căn cứ vào dấu hiệu này để kết thúc thao tác đọc file. Bạn không nhìn thấy EOF vì các trình Editor (soạn thảo văn bản) không hiển thị nó, nhưng hàm read-line thì biết, khi gặp EOF, nó return (hoàn trả) giá trị nil.

- Trong quá trình đọc, sau mỗi dòng, bạn có thể dùng append để ghi nhận thông tin từng dòng vào một list

- Kết thúc quá trình, bạn sẽ nhận đuợc 1 list chứa toàn bộ nội dung của file Data01.txt. Mỗi phần tử của list là 1 string (chuỗi ký tự). Mỗi string sẽ chứa các dữ liệu bạn cần, được phân biệt bằng dầu tab ("\t"). Đến đây có lẽ bạn đã biết cách tách ra cái mình cần?

- Ssg đã xây dựng sẵn hàm FtoL, convert trực tiếp từ file *.txt kiểu như trên sang List 2 cấp (mỗi phần tử của list cấp 1 là 1 list cấp 2, mỗi phần tử của list cấp 2 chính là dữ liệu của 1 cell trong bảng). Bạn có thể vào chương trình Mechanical CadViet (trong box CadViet Utility) để tham khảo.

 

6. Làm tương tự bước 5 với file Data01.csv, bạn sẽ thấy như sau:

 

csv01.jpg

 

Nó không ngay hàng thẳng lối, nhưng cung cách tổ chức giống y chang như với file Data01.txt, chỉ khác ở chỗ dấu tab được thay bằng dấu phẩy. Hoàn toàn tương tự như trên, bạn cũng tách ra được các dữ liệu, cái nào ra cái đó như ý muốn dựa vào dấu phẩy ngăn cách.

 

Bạn hãy tự làm và tự chiêm nghiệm với 2 kiểu database trên. Khi bạn đã thông suốt với *.txt và *.csv, ssg sẽ giới thiệu kiểu *.xls (kiểu này lôi thôi hơn, nếu không thông 2 kiểu trên e rằng hơi khó trình bày).

 

Hẹn gặp lại!

ntSon đã thông hiểu với file *.txt, *.csv. Rất mong SSG nói về cách lấy dữ liệu ở file *.xls, và có 1 ví dụ cụ thể

vd tách dữ liệu từ 1 file *.xls như sau:

A1 A2 A3 A4

B1 B2 B4

C1 C2 C3

D1 D2 D3 D4

E1 E2

(Nhiều nhất có 4 cột)

Cảm ơn SSG rất 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ác file bạn up lên không đủ thông tin cần thiết để lập trình! Các file *.jpg và file 3d của bạn chỉ giúp được cái nhìn tổng quan, chưa nói lên điều gì cả, có chăng là một vài nhận định chung nhất về tính khả thi của ý tưởng cũng như định hướng chung chung về lập trình. Để có chương trình, cần phải mô tả chi tiết hơn, cụ thể "đến từng sợi tóc". Bạn phải cung cấp cái Input và Output chính xác. Cụ thể:

- Input: file *.xls và các file *.dwg, *.dwt có liên quan trong library

- Output: khoảng 5 đến 10 file *.dwg khác nhau và mang tính chất điển hình trong toàn bộ project của bạn

Chương trình sẽ lấy data từ cái Input, xử lý và tạo ra cái Output như bạn đã post

 

Lưu ý:

Phải là các file y chang như bạn thực hiện thật sự cho Cty, không thiếu bất cứ chi tiết nhỏ nào chứ không phải các file ví dụ chung chung. Rất nhiều thông tin chứa trong file, có khi bạn cho là không quan trọng, không cần đề cập đến, nhưng chúng rất quan trọng đối với người lập trình. Tóm lại, các file tự chúng sẽ nói lên nhiều điều, bạn không cần giải thích dài dòng.

 

Nếu bạn thấy vướng vấn đề security của Cty thì thôi, không phải miễn cưỡng!

Từ idea biến thảnh hiện thực phải cần có thời gian bác Ssg ạ.

PP chưa có cái "- Input: file *.xls và các file *.dwt có liên quan trong library"

PP cần phải giàn xếp thời gian để tạo bảng Excel mẫu, các chủng loại cho library... rồi mới gởi Bác.

Output thì tuỳ khung tên của từng cty yêu cầu, nhưng đối với PP thì bv đã post trên là đầy đủ rồi đó bác Ssg.

Để model hoặc detailing cái tháp thép, bv 3D cùng với list vật liệu, số bolts+size mỗi thanh và hình cho biết ID của từng thanh như trong link trên cũng là đầy đủ (ngoài trừ các plate). Drafter cần lấy kích thước trong bv 3D rồi vẽ thành các chi tiết gia công. Cám ơn ý kiến của bác 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ạ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
Đăng nhập để thực hiện theo  

×