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

Liên hệ QC

echo07

Nguyệt Hà
Tham gia
24/8/07
Bài viết
422
Được thích
316
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

  • Cad.rar
    764.9 KB · Đọc: 2,146
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.
 
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..
 
Ý 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õ.
 
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.
 
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.
 
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
 
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.
 
Đú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 ...
 
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é
 
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.
 
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.
 
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

  • ExportText.rar
    972 bytes · Đọc: 1,834
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:
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.
 
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!
 
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.
 
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?
 
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
 
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?
 
Web KT
Back
Top Bottom