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

Hỏi cách link từ file excel vào khung tên trong autocad

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

prouce    0

Chào các bác pro! em có 1 vấn đề quá nan giải luôn, là trong dự án của em có đến 100 bản vẽ có kiểu trình bày khung tên như file dưới đây, và 1 vấn đề là những chữ màu đỏ trong khung tên này thường xuyên phải thay đổi theo yêu cầu của dự án, mà mỗi lần chỉ có 1 thay đổi nhỏ lại phải đổi tên 1 loạt cả 100 bản thì chết toi em, các bác có phương án nào link được chữ màu đỏ trong Autocad sang ô màu đỏ trong file excell ko? thanks các bác nhiều lắm. em sắp lụt rồi :(

các bác xem file giúp em rùi đưa giải pháp nhé: https://www.mediafire.com/?63wrbu022h6sa67

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
Tot77    501

Việc này cũng có thể giải quyết bằng lisp. Tôi không rành lắm về lệnh của cad, có thể có lệnh nào đó giải quyết vấn đề này nhưng tạm thời bạn dùng cái lisp dưới đây.

Tuy nhiên có vài vấn đề cần đặt ra là :

1. Trong ô ngày tháng (02/07/2014) và scale của bản vẽ (1:20) trong file excel bạn phải cho format của nó là text (thêm dấu ' đằng trước) , nếu không cad sẽ hiểu đó là số chứ không phải text.

2. File dwg và xls ở cùng thư mục và file excel tên là Link.xlsx. Nếu bạn làm 100 cái khung thì nên copy 100 cái khung đó trong cùng bản vẽ, đồng thời ghi 100 dòng trong file excel tương ứng. Tức là khi làm việc chỉ có 1 file cad và 1 excel thôi.

3. Còn 1 vấn đề tôi chưa giải quyết được là font chữ, tức là chữ tiếng việt có dấu không hiển thị được, cái này tính sau.

 

Lisp sẽ hỏi số dòng trong file excel (ở ví dụ này là 2), sau đó nhấp vào cái Attribute Block, nó sẽ điền thông tin từ excel vào cad.

 

Cái này có thể làm hàng loạt nếu trong Dynamic Block của bạn có thêm 1 cái att ghi số dòng (từ 2 -> 101 chẳng hạn), hoặc bạn dùng att có sẵn sửa số cũng được.

(defun c:tmp()
 (setq l0 (list "$DWGNAME1" "$R_DAY0" "$R_DESCR0" "$R_DWR0" "$R_CHK0" "$R_APP0"  "$SCALES"  "$FORMAT"
"$R_DAY0_1" "$TITLE_1" "$TITLE_2" "$TITLE_3"  "$TITLE_4" "$DWGNAME1" "$NR1")
       row (getint "\nChon dong trong file Excel:")
       col 0)
 
 (setq excel (vlax-create-object "Excel.Application")  
       currworkbook (vlax-invoke-method (vlax-get-property excel 'Workbooks)
'Open (strcat (getvar 'dwgprefix) "Link.xlsx"))
       cells (vlax-get-property (vlax-get-property excel 'ActiveSheet) 'Cells))
 (setq l1 (mapcar '(lambda(x) (cons x
(vlax-variant-value (vlax-get-property (vlax-variant-value (vlax-get-property cells 'ITem row (setq col (1+ col)))) 'Value)))) l0))
 
 (setq en (car (entsel "\nChon dynamic Block:")))
 (while (and (setq en (entnext en))
    (/= (cdr (assoc 0 (entget en))) "SEQEND"))
    (if (and (vlax-property-available-p (setq obj (vlax-ename->vla-object en)) 'TagString)
    (setq tm (assoc (vla-get-TagString obj) l1)))
      (vla-put-TextString obj (cdr tm)))
 )
)
 
 
  • 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
prouce    0

 

Việc này cũng có thể giải quyết bằng lisp. Tôi không rành lắm về lệnh của cad, có thể có lệnh nào đó giải quyết vấn đề này nhưng tạm thời bạn dùng cái lisp dưới đây.

Tuy nhiên có vài vấn đề cần đặt ra là :

1. Trong ô ngày tháng (02/07/2014) và scale của bản vẽ (1:20) trong file excel bạn phải cho format của nó là text (thêm dấu ' đằng trước) , nếu không cad sẽ hiểu đó là số chứ không phải text.

2. File dwg và xls ở cùng thư mục và file excel tên là Link.xlsx. Nếu bạn làm 100 cái khung thì nên copy 100 cái khung đó trong cùng bản vẽ, đồng thời ghi 100 dòng trong file excel tương ứng. Tức là khi làm việc chỉ có 1 file cad và 1 excel thôi.

3. Còn 1 vấn đề tôi chưa giải quyết được là font chữ, tức là chữ tiếng việt có dấu không hiển thị được, cái này tính sau.

 

Lisp sẽ hỏi số dòng trong file excel (ở ví dụ này là 2), sau đó nhấp vào cái Attribute Block, nó sẽ điền thông tin từ excel vào cad.

 

Cái này có thể làm hàng loạt nếu trong Dynamic Block của bạn có thêm 1 cái att ghi số dòng (từ 2 -> 101 chẳng hạn), hoặc bạn dùng att có sẵn sửa số cũng được.

(defun c:tmp()
 (setq l0 (list "$DWGNAME1" "$R_DAY0" "$R_DESCR0" "$R_DWR0" "$R_CHK0" "$R_APP0"  "$SCALES"  "$FORMAT"
"$R_DAY0_1" "$TITLE_1" "$TITLE_2" "$TITLE_3"  "$TITLE_4" "$DWGNAME1" "$NR1")
       row (getint "\nChon dong trong file Excel:")
       col 0)
 
 (setq excel (vlax-create-object "Excel.Application")  
       currworkbook (vlax-invoke-method (vlax-get-property excel 'Workbooks)
'Open (strcat (getvar 'dwgprefix) "Link.xlsx"))
       cells (vlax-get-property (vlax-get-property excel 'ActiveSheet) 'Cells))
 (setq l1 (mapcar '(lambda(x) (cons x
(vlax-variant-value (vlax-get-property (vlax-variant-value (vlax-get-property cells 'ITem row (setq col (1+ col)))) 'Value)))) l0))
 
 (setq en (car (entsel "\nChon dynamic Block:")))
 (while (and (setq en (entnext en))
    (/= (cdr (assoc 0 (entget en))) "SEQEND"))
    (if (and (vlax-property-available-p (setq obj (vlax-ename->vla-object en)) 'TagString)
    (setq tm (assoc (vla-get-TagString obj) l1)))
      (vla-put-TextString obj (cdr tm)))
 )
)
 
 

Cảm ơn bác nhiều nhé, bác viết lisp này cao siêu quá, chắc em fai nghiên cứu từ từ,hehe  :D

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
Tot77    501

Sắp "lụt" đến nơi mà còn nghiên cứu từ từ sao?  :)

Còn có cách này "vui" hơn nữa là dựa vào tag File Name trong excel (cột 1), không cần phải tạo thêm att, bạn cứ để 100 file cad trong cùng thư mục với excel, bạn muốn sửa cái gì thì cứ sửa trong excel, sau đó bật file cad cần sửa, đánh lệnh, lisp sẽ tìm block mang tên CART001 (tên này phải cố định trong tất cả các bản vẽ) và có tag là tên bản vẽ (DLM-IMP-GDD-WVO-J08-00010-B ) và tự động cập nhật luô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
prouce    0

Sắp "lụt" đến nơi mà còn nghiên cứu từ từ sao?  :)

Còn có cách này "vui" hơn nữa là dựa vào tag File Name trong excel (cột 1), không cần phải tạo thêm att, bạn cứ để 100 file cad trong cùng thư mục với excel, bạn muốn sửa cái gì thì cứ sửa trong excel, sau đó bật file cad cần sửa, đánh lệnh, lisp sẽ tìm block mang tên CART001 (tên này phải cố định trong tất cả các bản vẽ) và có tag là tên bản vẽ (DLM-IMP-GDD-WVO-J08-00010-B ) và tự động cập nhật luôn. 

hehe, thanks bác nhé! nhưng tại nó cao siêu quá nên em chống cháy bằng cách kia trước còn cái này nghiên cứu sau thoai :D. thanks bác đã nhiệt tình. hehe

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
monoclo    1

mình xin giới thiệu phầm mềm excellink, chức năng chắc cũng tương tự như lisp của bác trên, chẳng qua là họ tự động hóa nó để dễ sử dụng hơn :D

 

clip hướng dẫn https://www.youtube.com/watch?v=n0nr8DOczmk, link download excellink có nhiều bạn hỏi bác google 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
prouce    0

mình xin giới thiệu phầm mềm excellink, chức năng chắc cũng tương tự như lisp của bác trên, chẳng qua là họ tự động hóa nó để dễ sử dụng hơn :D

 

clip hướng dẫn https://www.youtube.com/watch?v=n0nr8DOczmk, link download excellink có nhiều bạn hỏi bác google nhé

Thanks bác nhiều nhé, nhìn tnay thì đúng là em làm đc,hehe. Thanks sự nhiệt tình của bác.

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


Liên kết tới bài đăng
Chia sẻ trên các trang web khác

Em nhờ các bác giúp em cái lisp chuyển text att thành block att và giữ đúng nội dung text: Em có rất nhiều text dạng att, giờ em muốn chuyển mỗi text đó thành 1 block att và vẫn giữ đúng nội dung ( kiểu 100 text att sẽ chuyển thành 100 block att nội dung của từng text vẫn giữ nguyên khi chuyển sang block att).

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
Tue_NV    3.841

Em nhờ các bác giúp em cái lisp chuyển text att thành block att và giữ đúng nội dung text: Em có rất nhiều text dạng att, giờ em muốn chuyển mỗi text đó thành 1 block att và vẫn giữ đúng nội dung ( kiểu 100 text att sẽ chuyển thành 100 block att nội dung của từng text vẫn giữ nguyên khi chuyển sang block att).

 

Gửi file lên đây đi bạ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

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


×