PDA

View Full Version : Làm sao lấy dữ liệu trong cad qua excel?



echo07
16-07-08, 02:27 PM
Em muốn lấy dữ liệu chữ trong Autocad (đã được lập thành bảng) qua excel để tính toán.
cao thủ nào tinh thông thì chỉ giáo giùm em cái chứ cop từng dòng thì chết em mà lại không chính xác.

huycuongxd
16-07-08, 02:56 PM
Mình nghĩ là ko thể làm được đâu bạn ạh. Các đối tượng trong AutoCAD khi copy sang Excel thì nó trở thành Picture. Excel chỉ "làm việc" với các ký tự thôi. Ta chỉ có thể làm ngược lại, copy từ Excel vào AutoCAD -> thành đối tượng của AutoCAD.

echo07
16-07-08, 02:58 PM
Những ai phải bóc vật tư từ bản vẽ ra thì họ làm sao nhỉ??? làm thủ công thì chết. Cao thủ VBA đâu rồi giúp em với..

huycuongxd
16-07-08, 03:05 PM
Ý tưởng của bạn rất hay nhưng quá khó. Nếu bảng biểu trong CAD của bạn là các con số thì mình nghĩ sử dụng các Autolisp để tính toán ngay trong CAD cũng được. Tìm hiểu về phần mềm "TKXD" (trợ giúp thiết kế xây dựng) bạn sẽ rõ.

PhanTuHuong
17-07-08, 11:46 AM
Vấn đề này thực hiện tốt bằng VBA. Đầu tiên chọn đối tượng cần chuyển (bôi đen hoặc tạo trong SelectionSets). Sau đó dùng thủ tục để duyệt qua từng đối tượng và copy sang là được thôi.

echo07
17-07-08, 03:26 PM
Kính chào bác Phan Tu Huong. Em có thấy bài viết của bác bên Cadviet. em biết bác có thể giải quyết dễ dàng bài toán này nhưng ý bác em không hiểu (đúng ra là chưa đủ trình độ để hiểu) Vậy bác quá bộ giúp em (và nhiều anh em khác nữa) bằng cách giải trực tiếp lên file của em được không? Nếu được thì đa tạ bác nhiều lắm lắm.

PhanTuHuong
19-07-08, 01:42 PM
Tôi giúp bạn 1 đoạn code trong VBA, đoạn này sẽ lọc toàn bộ đối tượng Text trong cửa sổ chọn, bạn nghiên cứu và chuyển sang Excel là ổn:


Sub CopyTextSangExcel()
Dim ChuT As AcadEntity
Dim asset As AcadSelectionSet
Dim Diembao1P As Variant, Diembao2P As Variant
Dim i As Integer

'Bo qua loi neu asset khong ton tai
On Error Resume Next
With ActiveDocument.SelectionSets
.Item("asset").Delete
'Tao doi tuong asset
Set asset = .Add("asset")
End With
'Chon toan bo doi tuong trong cua so chon vao asset
With ActiveDocument.Utility
Diembao1P = .GetPoint(, vbLf & "Chon diem bao o phia tren, ben trai:")
Diembao2P = .GetPoint(, vbLf & "Chon diem bao o phia duoi, ben phai:")
End With
asset.Select acSelectionSetWindow, Diembao1P, Diembao2P
asset.Highlight True

i = 0

'Duyet qua tung doi tuong trong asset
For Each ChuT In asset
'Chi chon doi tuong la Text
If ChuT.ObjectName = "AcDbText" Then
i = i + 1
ChuT.Highlight False
MsgBox "Gia tri cua doi tuong thu " & i & ": " & ChuT.TextString
End If
Next

MsgBox "Vung chon co " & i & " doi tuong."

asset.Highlight False

Set asset = Nothing
Set ChuT = Nothing

End Sub

echo07
21-07-08, 11:12 AM
thankyou bác Phan Tu Huong rất nhiều. bác vất cả vì anh em quá. đọc code của bác em đã chạy thử rất tốt nhưng các đối tượng chỉ xuất hiện cho biết vậy chứ có làm gì được các em nó đâu? với lại bọn chúng xuất hiện từ dưới lên nên cũng khó kiểm soát, bác quá bội làm cho chúng xuất hiện theo thứ tự từ trái qua phải,từ trên xuống dưới và có kiểm soát(ví dụ như chạy thẳng qua Excel và put vào từng ô tương ứng thì tuyệt cú mèo) Hay bác nghiên cứu và kết hợp với đoạn code này

Sub Ch12_Extract()
Dim Excel As Excel.Application
Dim ExcelSheet As Object
Dim ExcelWorkbook As Object

Dim RowNum As Integer
Dim Header As Boolean
Dim elem As AcadEntity
Dim Array1 As Variant
Dim Count As Integer

' Launch Excel.
Set Excel = New Excel.Application

' Create a new workbook and find the active sheet.
Set ExcelWorkbook = Excel.Workbooks.Add
Set ExcelSheet = Excel.ActiveSheet
ExcelWorkbook.SaveAs "Attribute.xls"

RowNum = 1
Header = False
' Iterate through model space finding
' all block references.
For Each elem In ThisDrawing.ModelSpace
With elem
' When a block reference has been found,
' check it for attributes
If StrComp(.EntityName, "AcDbBlockReference", 1) _
= 0 Then
If .HasAttributes Then
' Get the attributes
Array1 = .GetAttributes
' Copy the Tagstrings for the
' Attributes into Excel
For Count = LBound(Array1) To UBound(Array1)
If Header = False Then
If StrComp(Array1(Count).EntityName, _
"AcDbAttribute", 1) = 0 Then
ExcelSheet.Cells(RowNum, _
Count + 1).value = _
Array1(Count).TagString
End If
End If
Next Count
RowNum = RowNum + 1
For Count = LBound(Array1) To UBound(Array1)
ExcelSheet.Cells(RowNum, Count + 1).value _
= Array1(Count).textString
Next Count
Header = True
End If
End If
End With
Next elem
Excel.Application.Quit
End Sub

Đoạn này em có quét được nhưng trả kết quả sang Excel toàn kí tự từ 1 đến 19 trong một cột.
Nếu được thì cảm ơn bác nhiều lắm vì việc tách vật tư từ bản vẽ ra của bọn em rất nhiều.

PhanTuHuong
21-07-08, 09:42 PM
Đúng là code của mình chưa xác định được vị trí đối tượng, lại phải nghiên cứu tiếp ...

148btx
01-08-08, 08:44 AM
TableBuilder is designed to export AutoCAD table and the table drawn with lines and text in AutoCAD (LT)/MicroStation to Excel. Also you can convert the table drawn with lines and text to AutoCAD native table. == http://www.cadig.com == ...

Đây là chương trình nhỏ, tớ đang tìm Crack. khi nào có sẽ Up lên, chờ nhé

PhanTuHuong
07-08-08, 05:34 PM
Vì đối tượng text trong Cad phân bố không theo quy luật nên không thể copy vào bảng tính excel giống như xuất hiện trên Cad. Nếu text nằm trong Table (từ cad 2006 trở đi) có thể làm được.

tridung80
16-09-08, 02:42 PM
Trong Autocad có ngôn ngữ lập trình Autolisp, từ đó bạn có thể khai báo vùng dữ liệu để xuất sang Excel để làm dự toán trong quản lý dự án bất động sản. và ngôn ngữ sử dụng là VB, Chúc bạn tìm và làm được.

ndtnv
13-10-08, 01:19 PM
Thực sự thì vấn đề này không dễ vì bản vẽ acad thường không chuẩn, các text không chắc chắn là cùng toạ dộ x (hoặc cùng y)
Mình cũng phải thường lấy text trong bảng mặt cắt địa chất ra excel, nhưng chưa có thời gian để tìm ra cách viết bằng VBA
Hiện tại mình dùng lisp sau.
(xem file attach)
Dùng lệnh ExportText sau đó chọn bảng, mở file "e:data.txt" rồi copy vào excel

doancd4
15-10-08, 09:56 AM
Lisp này của bác Nguyễn Hoành bên Cad việt, chạy theo hàng ngang, hết hàng tự chuyển xuống. khi save thành đuôi *.csv. nhưng cũng phải cẩn thận sau mỗi dấu phẩy trong câu nó cũng tự chuyển cột vì trong mặc định của Text import wizard trong cell hiểu vậy thì phải, nhưng nếu là số thì OK.


(defun c:c2e ( / hangdau)
(defun sosanh (e1 e2 / p1 p2)
(setq p1 (car e1)
p2 (car e2)
)
(if (equal (cadr p1) (cadr p2) fuzz)
(< (car p1) (car p2))
(> (cadr p1) (cadr p2))
)
)
(setq
ss (ssget '((0 . "TEXT")))
lst (ss2ent ss)
lst (mapcar '(lambda (e) (cons (cdr (assoc 10 (entget e))) (cdr (assoc 1 (entget e))))) lst)
caotext (cdr (assoc 40 (entget (ssname ss 0))))
fuzz (* caotext 1.0)
lst (vl-sort lst 'sosanh)
index 1
oldy nil
fn (getfiled "Chon file de save" "" "csv" 1)
fid (open fn "w")
)
(foreach e lst
(if (equal oldy (cadr (car e)) fuzz)
(progn
(princ "," fid)
(setq index (1+ index))
)
(progn
(if hangdau
(progn
(setq index 1)
(princ "\n" fid)
)
(setq hangdau t)
)
)
)
(princ (cdr e) fid)
(setq oldy (cadr (car e)))
)
(close fid)
)
(defun ss2ent (ss / sodt index lstent)
(setq
sodt (if ss
(sslength ss)
0
)
index 0
)
(repeat sodt
(setq ent (ssname ss index)
index (1+ index)
lstent (cons ent lstent)
)
)
(reverse lstent)
)

PhanTuHuong
22-10-08, 02:44 PM
Tôi chưa xác định được quy luật phân phối text trong Cad bằng VBA, nếu xây dựng bảng Table (từ Câd200 trở lên) thì vấn đề này giải quyết được tốt.

unikey
27-11-08, 11:51 AM
Việc này tôi vẫn giải quyết được miễn là dữ liệu trong ACad là text va sắp xếp tương đối theo bảng thi khả năng chuyển sang Cell gần như tuyệt đối.
- Thứ nhất: chuyển dữ liệu trong Acad với mỗi cột tương ứng với một layer
- Thứ hai: chuyển dữ liệu từ Acad sang Cell với mỗi layer vào một cột (lúc này thứ tự dữ liệu chưa đúng như dữ liệu gốc). Để giải quyết được vấn đề này bạn chỉ cần lấy tọa độ của text trong ACad và sắp xếp lại nó trong Cell.
Bạn thử xem, tôi thường dùng để chuyển dữ liệu thống kê thép từ ACad sang Cell.
Chúc bạn thành công!

ngoduong
24-06-09, 01:55 PM
Bạn dùng lệnh Dataextraction trong Cad2008 la co the lay duoc so lieu tu Cad sang Excel. Ban chon toan bo Text ban muon lay, sau mot hoi Next ban chi can chon Text và Geometry. Tiep tuc next va chi chon Value va Position X, hoặc Position Y. Lai tiếp tục Next và Next. Số liệu đó được xuất ra file Excel nằm trong My Document, ban mở file do ra và sắp xếp theo giá trị tăng hoặc giảm dần của X, Y là xong.
Bạn làm thử đi, quen rồi thấy rất tiện và chính xác.

lsxinh
19-07-09, 04:00 PM
Bạn dùng lệnh Dataextraction trong Cad2008 la co the lay duoc so lieu tu Cad sang Excel. Ban chon toan bo Text ban muon lay, sau mot hoi Next ban chi can chon Text và Geometry. Tiep tuc next va chi chon Value va Position X, hoặc Position Y. Lai tiếp tục Next và Next. Số liệu đó được xuất ra file Excel nằm trong My Document, ban mở file do ra và sắp xếp theo giá trị tăng hoặc giảm dần của X, Y là xong.
Bạn làm thử đi, quen rồi thấy rất tiện và chính xác.
Nhưng để lồng vào một chương trình khác thì hơi khó.
Ví dụ chương trình tính san nền trong cad nhưng lại kết xuất dữ liệu sang excel để làm báo cáo thì dùng cái này không tiện phải không bạn?

khoitdc
26-08-09, 10:18 PM
Bó tay thật đấy, chưa nghe cái kiểu chuyển dữ liệu từ cad sang excel bao giờ, mà chỉ có kiểu hình ảnh thôi, nếu cao thủ nào giúp và post cho anh em tham khảo thì công việc giảm đi rất nhiều, nhất là những bảng thống kê dữ liệu từ cad mà ta ko phải nhập lại cho đỡ mệt và tránh được khỏi nhầm lẫn

catchay
31-08-09, 02:44 PM
Bạn dùng lệnh Dataextraction trong Cad2008 la co the lay duoc so lieu tu Cad sang Excel. Ban chon toan bo Text ban muon lay, sau mot hoi Next ban chi can chon Text và Geometry. Tiep tuc next va chi chon Value va Position X, hoặc Position Y. Lai tiếp tục Next và Next. Số liệu đó được xuất ra file Excel nằm trong My Document, ban mở file do ra và sắp xếp theo giá trị tăng hoặc giảm dần của X, Y là xong.
Bạn làm thử đi, quen rồi thấy rất tiện và chính xác.
Đúng là có thể lấy được như vậy nhưng việc xuất số liệu sang excel kết quả chỉ cho vào một cột là value, trong khi nếu trong cad một bảng có nhiều hàng và cột thì hic...hic, xuất các giá trị vào excel lại lung tung. Ví dụ, trong cad tôi có bảng là
a b c
1 2 3
3.2 4.5 1.4
thì khi xuất sang excel lại chỉ có một cột
a
1
3.2
4.5
b
2
c
3
1.4
như vậy sẽ khó quản lý số liệu, vậy bác có thể chỉ rõ làm thế nào để xuất sang excel cũng có được kết quả :
a b c
1 2 3
3.2 4.5 1.4
như trong bảng của cad?

lsxinh
29-09-09, 12:06 PM
Bó tay thật đấy, chưa nghe cái kiểu chuyển dữ liệu từ cad sang excel bao giờ, mà chỉ có kiểu hình ảnh thôi, nếu cao thủ nào giúp và post cho anh em tham khảo thì công việc giảm đi rất nhiều, nhất là những bảng thống kê dữ liệu từ cad mà ta ko phải nhập lại cho đỡ mệt và tránh được khỏi nhầm lẫn

Mình cũng đang tìm hiểu vấn đề này. Có sách về nó đấy bạn vào google tìm
AutoCAD integrated with MS excel sẽ có ngay!

phanmanhphu
13-10-10, 12:02 AM
Em muốn lấy dữ liệu chữ trong Autocad (đã được lập thành bảng) qua excel để tính toán.
cao thủ nào tinh thông thì chỉ giáo giùm em cái chứ cop từng dòng thì chết em mà lại không chính xác.

MÌnh làm cái này ngon mà , xuất sang excel dạng dữ liệu luôn chỉ cần xóa bớt các cột không cần thiết thôi.
Các bạn vào cad , in bảng thống kê dưới dạng pdf rồi dùng Able2Extract Professional (http://www.vn-zoom.com/f181/able2extract-pro-6-0-chuyen-file-pdf-pro-nhat-381460.html) convert sang file excel là ok ( nhớ xoay cho file PDF đúng chiều thẳng đứng rồi ctrl+A để chọn hết nhé )

HNP
12-11-10, 02:01 PM
Trước giờ tôi sử dụng lisp dưới đây, nhưng chịu khó vẽ các line sao cho nó thành bảng.

tranlink
17-11-10, 02:17 AM
TO 148btc
Theo tôi, phần mềm CADIG không đáp ứng được yêu cầu của echo. Phần mềm này chỉ hơn việc copy từ excel qua autocad ở chỗ nó thể hiện bolder theo cad. Tuy nhiên, copy từ excel qua cad không bị anh hưởng bởi bolder kia.
Có lẽ VBA là phương pháp hiệu quả hơn trong trường hợp này

onfuture
26-11-10, 03:19 PM
Trước giờ tôi sử dụng lisp dưới đây, nhưng chịu khó vẽ các line sao cho nó thành bảng.


Cái lsp này là good nhất, ths bạn

hungba_113
01-05-11, 11:19 PM
cảm ơn HNP nhiều nhiều lắm...tìm cả tháng mới thấy cái líp qá tuyệt vời...

adoonis
09-05-11, 06:40 AM
những thứ bạn cần ở đây http://www.mediafire.com/file/iiyonukkupv34if/didg.rar bạn có thể tham khảo ở đây.
http://camranhvinh.blogspot.com/2011/05/xuat-du-lieu-qua-lai-giua-autocad-va.html
Lưu ý: vì tiện ích này của mấy bác Korea nên một số từ không hiện Font nhưng điều đó không quan trọng.

nguyenvanhau
24-08-11, 03:49 PM
Gửi bác HNP
Sao em download cái lisp của bác về mà dùng không được vậy, có phải lệnh của nó là b2e không. khi em chon hai điểm xong thi nó cũng mở ra bảng excell nhưng trong đó khôg có gì cả. (bảng thống kê thép ở cad em muốn chuyển qua excell mà). Mong bác chỉ giáo thêm cách sử dụng. em dùng cad 2007, excell 2003.
Cảm ơn bác!

HNP
27-08-11, 09:51 PM
@nguyenvanhau (http://www.giaiphapexcel.com/forum/member.php?20197-nguyenvanhau): có file hướng dẫn đi kèm đó bạn.

vu_tuan_manh_linh
27-08-11, 10:54 PM
Bạn lên mạng tìm kiếm chương trình Cad2file nhé. Đó là một Add-Ins viết cho CAD. Sau khi nạp vào CAD, bạn chạy chương trình, sẽ có nhiều lựa chọn của các đối tượng CAD để bạn truy xuất sang Excel dưới dạng file CSV. Vấn đề là bạn phải viết 1 đoạn code để lọc lại dữ liệu đó, lấy ra các dữ liệu bạn muốn. Mình đã thử với các file tính thép, Cad2file lấy ra được các thông số mình cần như số hiệu thép, số thanh, chiều dài thanh, khối lượng đơn vị. Sau đó căn cứ vào cấu trúc dữ liệu để viết đoạn code phù hợp, lấy ra các số liệu cần thiết và sắp xếp theo 1 bảng tính chuẩn.

huuson240985
07-09-12, 04:24 PM
Gửi bác HNP
Sao em download cái lisp của bác về mà dùng không được vậy, có phải lệnh của nó là b2e không. khi em chon hai điểm xong thi nó cũng mở ra bảng excell nhưng trong đó khôg có gì cả. (bảng thống kê thép ở cad em muốn chuyển qua excell mà). Mong bác chỉ giáo thêm cách sử dụng. em dùng cad 2007, excell 2003.
Cảm ơn bác!

do bản vẽ cad của bạn đang ở hệ toạ độ người dùng, đưa về toạ độ gốc của cad , ucs/enter 2 lần/ plan/ enter 2 lần chúc bạn vui vẽ

kybangha91
02-01-13, 11:35 PM
Bạn lên mạng tìm kiếm chương trình Cad2file nhé. Đó là một Add-Ins viết cho CAD. Sau khi nạp vào CAD, bạn chạy chương trình, sẽ có nhiều lựa chọn của các đối tượng CAD để bạn truy xuất sang Excel dưới dạng file CSV. Vấn đề là bạn phải viết 1 đoạn code để lọc lại dữ liệu đó, lấy ra các dữ liệu bạn muốn. Mình đã thử với các file tính thép, Cad2file lấy ra được các thông số mình cần như số hiệu thép, số thanh, chiều dài thanh, khối lượng đơn vị. Sau đó căn cứ vào cấu trúc dữ liệu để viết đoạn code phù hợp, lấy ra các số liệu cần thiết và sắp xếp theo 1 bảng tính chuẩn.
em thấy cad2file khi mình chọn nhiều nó thường không chạy và lại khi chọn Mtext thì thấy giá trị nó nhảy loạn lên.

deprach21
15-10-13, 08:26 AM
cách dùng như thế nào vậy anh???

hung_xu20032000
18-10-13, 10:17 PM
Em muốn lấy dữ liệu chữ trong Autocad (đã được lập thành bảng) qua excel để tính toán.
cao thủ nào tinh thông thì chỉ giáo giùm em cái chứ cop từng dòng thì chết em mà lại không chính xác.
Lâu rồi mới vào mạng. Hôm nay đọc bài của bạn mình thấy có 2 loại dữ liệu mà bạn yêu cầu. Nếu dữ liệu được lập từ phần mềm Topo, NOva do máy tạo nên thì không khó gì. Ở phần tiện ích sẽ trích suất sang được excell. Nếu là dữ liệu nhập bằng tay thì hơi khó đấy.

nhoxd
22-10-13, 11:04 AM
bác ơi cái này dùng thế nào thế. e tải dk về rồi nhưng ko biết làm thế nào nữa, bac giúp e với. e cảm ơn