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

echo07

Nguyệt Hà
Tham gia ngày
24 Tháng tám 2007
Bài viết
263
Được thích
193
Điểm
695
Nơi ở
Đối diện Gpe
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.
 

File đính kèm

huycuongxd

Thành viên thường trực
Tham gia ngày
20 Tháng sáu 2008
Bài viết
397
Được thích
488
Điểm
710
Nơi ở
#REF!
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

Nguyệt Hà
Tham gia ngày
24 Tháng tám 2007
Bài viết
263
Được thích
193
Điểm
695
Nơi ở
Đối diện Gpe
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

Thành viên thường trực
Tham gia ngày
20 Tháng sáu 2008
Bài viết
397
Được thích
488
Điểm
710
Nơi ở
#REF!
Ý 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

Excel & AutoCad & VBA & VB.NET
Thành viên danh dự
Tham gia ngày
13 Tháng sáu 2006
Bài viết
6,863
Được thích
23,443
Điểm
1,860
Nơi ở
Hà Nội
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

Nguyệt Hà
Tham gia ngày
24 Tháng tám 2007
Bài viết
263
Được thích
193
Điểm
695
Nơi ở
Đối diện Gpe
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

Excel & AutoCad & VBA & VB.NET
Thành viên danh dự
Tham gia ngày
13 Tháng sáu 2006
Bài viết
6,863
Được thích
23,443
Điểm
1,860
Nơi ở
Hà Nội
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:

PHP:
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

Nguyệt Hà
Tham gia ngày
24 Tháng tám 2007
Bài viết
263
Được thích
193
Điểm
695
Nơi ở
Đối diện Gpe
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

Excel & AutoCad & VBA & VB.NET
Thành viên danh dự
Tham gia ngày
13 Tháng sáu 2006
Bài viết
6,863
Được thích
23,443
Điểm
1,860
Nơi ở
Hà Nội
Đú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

Thành viên mới
Tham gia ngày
14 Tháng mười 2006
Bài viết
40
Được thích
102
Điểm
0
Nơi ở
Bùi Thị Xuân, Hà Nội
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

Excel & AutoCad & VBA & VB.NET
Thành viên danh dự
Tham gia ngày
13 Tháng sáu 2006
Bài viết
6,863
Được thích
23,443
Điểm
1,860
Nơi ở
Hà Nội
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

Thành viên mới
Tham gia ngày
20 Tháng tám 2008
Bài viết
2
Được thích
0
Điểm
0
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

Thành viên mới
Tham gia ngày
7 Tháng mười 2008
Bài viết
22
Được thích
14
Điểm
0
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
 

File đính kèm

doancd4

Thành viên mới
Tham gia ngày
28 Tháng sáu 2007
Bài viết
12
Được thích
4
Điểm
665
Tuổi
34
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.

Mã:
(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)
)
 
Chỉnh sửa lần cuối bởi điều hành viên:

PhanTuHuong

Excel & AutoCad & VBA & VB.NET
Thành viên danh dự
Tham gia ngày
13 Tháng sáu 2006
Bài viết
6,863
Được thích
23,443
Điểm
1,860
Nơi ở
Hà Nội
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

Thành viên mới
Tham gia ngày
4 Tháng mười 2006
Bài viết
1
Được thích
0
Điểm
663
Tuổi
40
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

Thành viên mới
Tham gia ngày
10 Tháng bảy 2007
Bài viết
1
Được thích
1
Điểm
665
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

Thành viên chính thức
Tham gia ngày
29 Tháng mười một 2008
Bài viết
93
Được thích
62
Điểm
680
Tuổi
38
Nơi ở
Hải phòng
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

Thành viên mới
Tham gia ngày
19 Tháng tám 2009
Bài viết
2
Được thích
0
Điểm
0
Tuổi
35
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

Thành viên mới
Tham gia ngày
4 Tháng bảy 2009
Bài viết
1
Được thích
0
Điểm
0
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?
 
Top Bottom