乐筑天下

搜索
欢迎各位开发者和用户入驻本平台 尊重版权,从我做起,拒绝盗版,拒绝倒卖 签到、发布资源、邀请好友注册,可以获得银币 请注意保管好自己的密码,避免账户资金被盗
查看: 277|回复: 10

[原创]Auto CAD材料一览表数据到Excel

[复制链接]

120

主题

326

帖子

7

银币

中流砥柱

Rank: 25

铜币
806
发表于 2007-11-27 16:28:00 | 显示全部楼层 |阅读模式

zyrmpvvlkgq.jpg

zyrmpvvlkgq.jpg


图示材料一览表是绘制施工图最常见表现形式。有人用属性块的方法处理方法见AutoCAD vba 二次开发第317页。
但在实际操作过程中,材料表的数据是任意方法写的,如
idInsertTextInsertPointXInsertPointY21283572245-322.418415478249.499999721283572401.2138.8666674217.499999721283572480.037127.4444451217.499999721283572568111.8622229217.499999721283572643695.00888957217.49999972128357272螺母M1643.50000068217.49999972128357280GB6170-8617.04704513217.4999997212835728807RH09-0415.76704513161.4999997212835729607RH09-0615.76704513153.4999997212835730407RH09-0615.76704513129.4999997212835737607RH09-0415.7670451357.49999969212835738407RH09-0515.7670451349.49999969212835739207RH09-0515.7670451341.4999996921283574005-302.418415478233.4999997
hadle,x,y数据是无序排序。
要实现以下目标,需要进行SQL+数组排序处理。
5-107RH09-03固定管板I116Mn/0Cr18Ni10Ti 914.5其中不锈钢66.5kg5-3GB9948.SHJ405接管 DN20 Sch802200.20.4L=108
回复

使用道具 举报

2

主题

34

帖子

9

银币

初来乍到

Rank: 1

铜币
43
发表于 2017-11-8 18:02:00 | 显示全部楼层
谢谢楼主分享!
回复

使用道具 举报

120

主题

326

帖子

7

银币

中流砥柱

Rank: 25

铜币
806
发表于 2007-11-27 16:35:00 | 显示全部楼层

SQL+mdb处理方法
' 从数据库中读取数据
Sub ReadFromMdbFile()
    ' 创建数据库连接
    Dim YCount, nn As Integer
    Dim XDistinct, YDistinct
    Call CreateConnection
    Dim rst As ADODB.Recordset, ii As Integer
    ' 在line表中查询所有的记录
    Set rst = New ADODB.Recordset
    rst.CursorLocation = adUseClient
'Distinct Y 统计Y坐标的不重复数量
    rst.Open "SELECT val(format(InsertPointY,'0.00')) FROM EntityText" & _
         " Group By val(Format(InsertPointY,'0.00'))" & _
         " Order By val(Format(InsertPointY,'0.00'))  " & _
         "", cn, adOpenForwardOnly, _
            adLockBatchOptimistic, adCmdText
    rst.MoveFirst
    ReDim YDistinct(rst.RecordCount - 1)
    For ii = 0 To rst.RecordCount - 1
      YDistinct(ii) = rst.Fields(0).Value
      Debug.Print YDistinct(ii)
      rst.MoveNext
    Next ii
    rst.Close
1.5
9.5
17.5
25.5
33.5
41.5
49.5
57.5
65.5
73.5
81.5
89.5
97.5
'Distinct X 统计X坐标的不重复数据的数量
    rst.Open "SELECT val(format(InsertPointX,'0')) FROM EntityText" & _
         " Where  Format(InsertPointY,'0.00') = " & YDistinct(0) & _
         "", cn, adOpenForwardOnly, _
            adLockBatchOptimistic, adCmdText
    rst.MoveFirst
    ReDim XDistinct(rst.RecordCount - 1)
    For ii = 0 To rst.RecordCount - 1
      XDistinct(ii) = rst.Fields(0).Value
      Debug.Print XDistinct(ii)
      rst.MoveNext
    Next ii
    rst.Close
运行结果8列数的X坐标范围。
3
16
44
96
102
137
148
End Sub
相关的ADO帮助文件.
ADO.rar
2008-7-23
  1. Sub ExcelToCadTable()
  2.   ThisDrawing.ActiveTextStyle.fontFile = "c:\windows\fonts\SIMHEI.ttf"
  3.   Dim colArray, rowBaseData
  4.   colArray = Array(404.55, 424, 455.11, 499, 510.11, 540.11, 550.69, 561.64)
  5.   rowBaseData = 84.71 - 6 - 8
  6.   Dim objText As AcadText
  7.   Dim xlSheet1
  8.   Dim pp(0 To 2) As Double, ppp(0 To 2) As Double, alignmentPoint(0 To 2) As Double
  9.   Set xlSheet1 = ConnectExcel("Sheet1")
  10.   For ii = 40 To 1 Step -1
  11.     For jj = 0 To UBound(colArray) - 1
  12.       pp(0) = colArray(jj) + 2
  13.       pp(1) = rowBaseData + 8
  14.       tt = xlSheet1.Cells(ii, jj + 1)
  15.       Select Case jj
  16.         Case 5, 6
  17.           If Val(tt)  0 Then
  18.             tt = "0" & tt
  19.           End If
  20.       End Select
  21.       Set objText = ThisDrawing.ModelSpace.AddText(tt, pp, 4)
  22.       alignmentPoint(1) = pp(1)
  23.       Select Case jj
  24.         Case 2, 7
  25.           alignmentPoint(0) = colArray(jj) + 2
  26.           objText.Alignment = acAlignmentLeft
  27.           'objText.TextAlignmentPoint = alignmentPoint
  28.         Case Else
  29.           alignmentPoint(0) = colArray(jj) + (colArray(jj + 1) - colArray(jj)) / 2
  30.           objText.Alignment = acAlignmentCenter
  31.           objText.TextAlignmentPoint = alignmentPoint
  32.       End Select
  33.       '
  34.     Next jj
  35.     rowBaseData = rowBaseData + 8
  36.   Next ii
  37. End Sub
回复

使用道具 举报

120

主题

326

帖子

7

银币

中流砥柱

Rank: 25

铜币
806
发表于 2007-11-28 08:44:00 | 显示全部楼层

AutoCAD2006以上版本使用属性块的方法如下
' 导出到Word中
Public Sub OutputToWord(ByVal SSetObj As AcadSelectionSet, ByVal LBObj As ListBox)
    Dim wdApp As Word.Application
    Dim wdDoc As Word.Document
    Dim wdTable As Word.Table
   
    Dim EntObj As AcadEntity
    Dim AttRefObjs As Variant
    Dim n As Integer
    Dim i As Integer
    Dim j As Integer
   
    On Error Resume Next
    ' 连接Word
    Set wdApp = GetObject(, "Word.Application")
    If Err Then
        Err.Clear
        Set wdApp = CreateObject("Word.Application")
        If Err Then
            Err.Clear
            MsgBox "无法启动Word,请检查是否正确安装!"
            Exit Sub
        End If
    End If
    wdApp.Visible = True
   
    On Error GoTo ErrTrap
    ' 返回新创建的文档
    Set wdDoc = wdApp.Documents.Add
    ' 返回在段落一之后新创建的表格
    Set wdTable = wdDoc.Tables.Add(wdDoc.Paragraphs(1).Range, 1, LBObj.ListCount)
   
    n = 0
    ' 遍历选择集
    For Each EntObj In SSetObj
        ' 增加行
        wdTable.Rows.Add
        ' 返回属性数据
        AttRefObjs = EntObj.GetAttributes
        n = n + 1
        For i = 0 To UBound(AttRefObjs)
            For j = 0 To LBObj.ListCount - 1
                If AttRefObjs(i).TagString = LBObj.List(j) And LBObj.Selected(j) = True Then
                    If n = 1 Then
                        ' 首行,标签做为表格的列标题
                        wdTable.Cell(n, j + 1).Range.Text = AttRefObjs(i).TagString
                        wdTable.Cell(n + 1, j + 1).Range.Text = AttRefObjs(i).TextString
                    Else
                        wdTable.Cell(n + 1, j + 1).Range.Text = AttRefObjs(i).TextString
                    End If
                End If
            Next
        Next
    Next
   
    ' 删除表格中的空列
    For i = LBObj.ListCount - 1 To 0 Step -1
        If wdTable.Cell(1, i + 1).Range.Text = vbCr + Chr(7) Then
            wdTable.Columns(i + 1).Delete
        End If
    Next
   
    ' 按序号排序
    wdTable.Sort True, "列 1"
    ' 自动调整列宽
    wdTable.AutoFitBehavior 1
   
    ' 释放Word对象
    Set wdTable = Nothing
    Set wdDoc = Nothing
    Set wdApp = Nothing
    Exit Sub
   
ErrTrap:
    On Error GoTo 0
End Sub
' 导出到Excel中
Public Sub OutputToExcel(ByVal SSetObj As AcadSelectionSet, ByVal LBObj As ListBox)
    Dim xlApp As Excel.Application
    Dim xlBook As Excel.Workbook
    Dim xlSheet As Excel.Worksheet
   
    Dim EntObj As AcadEntity
    Dim AttRefObjs As Variant
    Dim n As Integer
    Dim i As Integer
    Dim j As Integer
   
    On Error Resume Next
    ' 连接Excel
    Set xlApp = GetObject(, "Excel.Application")
    If Err Then
        Err.Clear
        Set xlApp = CreateObject("Excel.Application")
        If Err Then
            Err.Clear
            MsgBox "无法启动Word,请检查是否正确安装!"
            Exit Sub
        End If
    End If
    xlApp.Visible = True
   
    On Error GoTo ErrTrap
    ' 返回新创建的工作簿
    Set xlBook = xlApp.Workbooks.Add
    ' 返回新增加的工作表,并移动到最后一个
    Set xlSheet = xlBook.Worksheets.Add
    xlSheet.Move , xlBook.Worksheets(xlBook.Worksheets.Count)
   
    n = 0
    ' 遍历选择集
    For Each EntObj In SSetObj
        ' 返回属性数据
        AttRefObjs = EntObj.GetAttributes
        n = n + 1
        For i = 0 To UBound(AttRefObjs)
            For j = 0 To LBObj.ListCount - 1
                If AttRefObjs(i).TagString = LBObj.List(j) And LBObj.Selected(j) = True Then
                    If n = 1 Then
                        ' 首行,标签做为表格的列标题
                        xlSheet.Cells(n, j + 1).Value = AttRefObjs(i).TagString
                        xlSheet.Cells(n + 1, j + 1).Value = AttRefObjs(i).TextString
                    Else
                        xlSheet.Cells(n + 1, j + 1).Value = AttRefObjs(i).TextString
                    End If
                End If
            Next
        Next
    Next
   
    ' 删除表格中的空列
    For i = LBObj.ListCount - 1 To 0 Step -1
        If xlSheet.Cells(1, i + 1).Value = "" Then
            xlSheet.Columns(i + 1).Delete
        End If
    Next
   
    ' 按序号排序
    xlSheet.UsedRange.Sort Key1:=Range("A2"), Header:=xlYes
    ' 自动调整列宽
    xlSheet.Columns.AutoFit
    ' 释放Exccel对象
    Set xlSheet = Nothing
    Set xlBook = Nothing
    Set xlApp = Nothing
    Exit Sub
   
ErrTrap:
    On Error GoTo 0
End Sub
Excel VBA 范例文件代码
Excel VBA 范例文件代码.rar
回复

使用道具 举报

120

主题

326

帖子

7

银币

中流砥柱

Rank: 25

铜币
806
发表于 2007-12-5 15:43:00 | 显示全部楼层

select选择集+图层Layer
Sub ls()
  Dim ss1 As AcadSelectionSet
  Dim layername As String
  Dim AcadEnt As AcadEntity
  'Dim pp1 As AcadPoint, pp2 As AcadPoint
  '指定图层名称
  'Set pp1 = ThisDrawing.Utility.GetPoint
  'Set pp2 = ThisDrawing.Utility.GetPoint
  layername = "件号"
  Dim tt As AcadText, MTt As AcadMText
  '得到选择集
  Dim gpCode(0) As Integer
  Dim dataValue(0) As Variant
  gpCode(0) = 8
  dataValue(0) = layername
  Set ss1 = ThisDrawing.SelectionSets.Add("ss3")
  ss1.Select acSelectionSetAll, , , gpCode, dataValue
  'ss1.Select acSelectionSetCrossing, pp1, pp2, , dataValue
For Each AcadEnt In ss1
  'Debug.Print AcadEnt.ObjectName
  Select Case AcadEnt.ObjectName
    Case "AcDbText"
      Set tt = AcadEnt
      Debug.Print tt.TextString
    Case "AcDbMText"
      Set MTt = AcadEnt
      Debug.Print "MText---", MTt.TextString
  End Select
Next
  ss1.Delete
  'ss1.Clear
End Sub
请点击此处下载

请先注册会员后在进行下载

已注册会员,请先登录后下载

文件名称:zsdf4rvrrk1.dvb 
下载次数:0  文件大小:36 KB  售价:2银币 [记录]
下载权限: 不限 以上或 Vip会员   [开通Vip]   [签到领银币]  [免费赚银币]


请点击此处下载

请先注册会员后在进行下载

已注册会员,请先登录后下载

文件名称:sxwp3bymdgl.dvb 
下载次数:0  文件大小:52 KB  售价:2银币 [记录]
下载权限: 不限 以上或 Vip会员   [开通Vip]   [签到领银币]  [免费赚银币]


请点击此处下载

请先注册会员后在进行下载

已注册会员,请先登录后下载

文件名称:dzm3nsyy1wr.dvb 
下载次数:0  文件大小:157 KB  售价:2银币 [记录]
下载权限: 不限 以上或 Vip会员   [开通Vip]   [签到领银币]  [免费赚银币]


请点击此处下载

请先注册会员后在进行下载

已注册会员,请先登录后下载

文件名称:xnxfe02wj3o.dvb 
下载次数:0  文件大小:52 KB  售价:2银币 [记录]
下载权限: 不限 以上或 Vip会员   [开通Vip]   [签到领银币]  [免费赚银币]


请点击此处下载

请先注册会员后在进行下载

已注册会员,请先登录后下载

文件名称:xfvbvo4pasz.dvb 
下载次数:0  文件大小:55.5 KB  售价:2银币 [记录]
下载权限: 不限 以上或 Vip会员   [开通Vip]   [签到领银币]  [免费赚银币]

回复

使用道具 举报

8

主题

31

帖子

3

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
63
发表于 2007-12-30 16:32:00 | 显示全部楼层
支持兰州人!
回复

使用道具 举报

5

主题

13

帖子

4

银币

初来乍到

Rank: 1

铜币
33
发表于 2008-1-13 12:32:00 | 显示全部楼层
好资料
回复

使用道具 举报

0

主题

20

帖子

5

银币

初来乍到

Rank: 1

铜币
20
发表于 2008-1-31 22:46:00 | 显示全部楼层
高人阿!谢谢
回复

使用道具 举报

1

主题

28

帖子

4

银币

初来乍到

Rank: 1

铜币
32
发表于 2008-2-25 19:01:00 | 显示全部楼层
收获了很多资料
回复

使用道具 举报

0

主题

1

帖子

1

银币

初来乍到

Rank: 1

铜币
1
发表于 2008-4-2 20:36:00 | 显示全部楼层
本人前不久也刚刚编写了一个cad表格自动输出到EXCEL的vba代码,基本思路就是把选择到的所有文字实体先按y坐标排序,由此可以把这些字分成若干行,每行再按纵坐标排序,确定先后顺序,缺点就是无法判断空的单元格,会导致后面的单元格内容串列.
回复

使用道具 举报

发表回复

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

  • 微信公众平台

  • 扫描访问手机版

  • 点击图片下载手机App

QQ|关于我们|小黑屋|乐筑天下 繁体中文

GMT+8, 2025-6-8 05:35 , Processed in 0.357381 second(s), 81 queries .

© 2020-2025 乐筑天下

联系客服 关注微信 帮助中心 下载APP 返回顶部 返回列表