Đến nội dung


Hình ảnh

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


  • Please log in to reply
11 replies to this topic

#1 prouce

prouce

    biết zoom

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

Đã gửi 02 July 2014 - 10:42 AM

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.mediafir...63wrbu022h6sa67


  • 0

#2 Tot77

Tot77

    biết lệnh adcenter

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

Đã gửi 02 July 2014 - 02:03 PM

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

  • 1

#3 prouce

prouce

    biết zoom

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

Đã gửi 02 July 2014 - 03:25 PM

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


  • 0

#4 Tot77

Tot77

    biết lệnh adcenter

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

Đã gửi 02 July 2014 - 03:51 PM

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. 


  • 0

#5 prouce

prouce

    biết zoom

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

Đã gửi 11 July 2014 - 10:47 AM

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


  • 0

#6 monoclo

monoclo

    biết vẽ line

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

Đã gửi 11 July 2014 - 01:47 PM

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é


  • 0

#7 prouce

prouce

    biết zoom

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

Đã gửi 11 July 2014 - 10:06 PM

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.


  • 0

#8 trungputin2003

trungputin2003

    biết vẽ line

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

Đã gửi 29 July 2014 - 09:09 AM

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


  • 0

#9 Tue_NV

Tue_NV

    KS Võ Quang Tuệ

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

Đã gửi 29 July 2014 - 09:56 AM

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!


  • 0

#10 trungputin2003

trungputin2003

    biết vẽ line

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

Đã gửi 29 July 2014 - 10:07 AM

Đây Bác Tuệ ơi. Nhờ Bác xem qua cho cái, đang cần quá. Cảm ơn Bác nhiều nha. http://www.cadviet.c...3/77861_att.dwg


  • 0

#11 trungputin2003

trungputin2003

    biết vẽ line

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

Đã gửi 31 July 2014 - 08:45 AM

Không biết có Bác nào gúp em dc không nhỉ!


  • 0

#12 trungputin2003

trungputin2003

    biết vẽ line

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

Đã gửi 21 August 2014 - 05:39 PM

Bác Tuệ dạo này bận quá rùi, khi nào có time Bác xem cho em với nhé, em rất cần. Thanks!!!!


  • 0