CAD VBA 导出cass扩展数据到excel

cass中往往会写入扩展数据,但获取扩展数据较为麻烦,此例我们通过getxdata函数获取实体的扩展数据,然后逐要素循环写入excel中,代码如下:

版本1:要素扩展数据字段不同

复制代码
Sub 导出扩展数据到excel()
    Dim Excel As Object
    Dim elem As Object
    Dim excelSheet As Object
    Dim Array1 As Variant
    Dim xdataOut As Variant
    Dim xtypeOut As Variant
    Dim Count, RowNum As Integer
    Dim NumberOfAttributes As Integer
    
    ' Start Excel
    On Error Resume Next
    
    Set Excel = GetObject(, "Excel.Application")
    
    If Err <> 0 Then
        Err.Clear
        Set Excel = CreateObject("Excel.Application")
            
        If Err <> 0 Then
            MsgBox "Could not load Excel.", vbExclamation
            End
        End If
    End If
    
   
    
    Excel.Visible = True
    Excel.Workbooks.Add
    Excel.Sheets("Sheet1").Select
    Set excelSheet = Excel.ActiveWorkbook.Sheets("Sheet1")
    
    RowNum = 1
   
   For Each elem In ThisDrawing.ModelSpace
        If StrComp(elem.EntityName, "AcDbPolyline", 1) = 0 Then
            If elem.HasAttributes Then
 ''通过getattributes函数我们把块的属性放入数组中,下图可见数组有3个项目
 ''每个项目都有tagstring和textstring,然后把数组中值输出到excel,至此
 ''我们提取出了块中的全部属性
                elem.Highlight (True)
                elem.GetXData "", xtypeOut, xdataOut
                
                For Count = LBound(xtypeOut) To UBound(xtypeOut)
                   
                        If StrComp(xtypeOut(Count).EntityName, "AcDbAttribute", 1) = 0 Then
                        
                            excelSheet.Cells(RowNum, Count + 1).Value = xtypeOut(Count)
                      
                        End If
                  
                Next Count
                RowNum = RowNum + 1
                For Count = LBound(xdataOut) To UBound(xdataOut)
                    excelSheet.Cells(RowNum, Count + 1).Value = xdataOut(Count)
                Next Count
              
            End If
             RowNum = RowNum + 1
        End If
       
    Next elem
    
    NumberOfAttributes = RowNum - 1
    
    If NumberOfAttributes > 0 Then
        excelSheet.UsedRange.Font.Bold = True
        
        'For a specific set of attribute information this could
        'be set to fit the exact number of columns.
        excelSheet.Columns("A:G").AutoFit

    Else
        MsgBox "未发现扩展数据" & Space(50) & vbCr & _
 "写代码qq:443440204", vbInformation, "版权所有qq:443440204"
        ''Excel.Quit
    End If
MsgBox "OK" & Space(50) & vbCr & _
 "vba代码二次开发qq:443440204", vbInformation, "版权所有qq:443440204"
End Sub

版本2:要素扩展数据字段相同

复制代码
Sub 导出扩展数据到excel()
    Dim Excel As Object
    Dim elem As Object
    Dim excelSheet As Object
     Dim xdataOut As Variant
    Dim xtypeOut As Variant
    Dim Count, RowNum As Integer
    Dim NumberOfAttributes As Integer
    
    ' Start Excel
    On Error Resume Next
    
    Set Excel = GetObject(, "Excel.Application")
    
    If Err <> 0 Then
        Err.Clear
        Set Excel = CreateObject("Excel.Application")
            
        If Err <> 0 Then
            MsgBox "不能加载Excel.", vbExclamation
            End
        End If
    End If
    

    
    Excel.Visible = True
    Excel.Workbooks.Add
    Excel.Sheets("Sheet1").Select
    Set excelSheet = Excel.ActiveWorkbook.Sheets("Sheet1")
    
    RowNum = 1
    Dim Header As Boolean
    For Each elem In ThisDrawing.ModelSpace
        
            If elem.HasAttributes Then
                 elem.Highlight (True)
                elem.GetXData "", xtypeOut, xdataOut
                For Count = LBound(xtypeOut) To UBound(xtypeOut)
                    If Header = False Then
                        If StrComp(xtypeOut(Count).EntityName, "AcDbAttribute", 1) = 0 Then
                            excelSheet.Cells(RowNum, Count + 1).Value = xtypeOut(Count)
                        End If
                    End If
                Next Count
                RowNum = RowNum + 1
                For Count = LBound(xdataOut) To UBound(xdataOut)
                    excelSheet.Cells(RowNum, Count + 1).Value = xdataOut(Count)
                Next Count
                Header = True
            End If
        
    Next elem
    
    NumberOfAttributes = RowNum - 1
    
    If NumberOfAttributes > 0 Then
        excelSheet.UsedRange.Font.Bold = True
        
        'For a specific set of attribute information this could
        'be set to fit the exact number of columns.
        excelSheet.Columns("A:G").AutoFit

    Else
        MsgBox "未发现扩展数据" & Space(50) & vbCr & _
 "写代码qq:443440204", vbInformation, "版权所有qq:443440204"
        ''Excel.Quit
    End If
MsgBox "OK" & Space(50) & vbCr & _
 "vba代码二次开发qq:443440204", vbInformation, "版权所有qq:443440204"
End Sub
相关推荐
愿你天黑有灯下雨有伞18 小时前
Java使用FastExcel实现Excel文件导入
java·excel
爆爆凯18 小时前
Excel 导入导出工具类文档
java·excel
凌康ACG1 天前
springboot打包二次压缩Excel导致损坏
spring boot·后端·excel
诸葛大钢铁2 天前
Excel转PDF的三种方法
笔记·职场和发展·pdf·excel
小小薛定谔2 天前
java操作Excel两种方式EasyExcel 和POI
java·python·excel
CodeCraft Studio2 天前
DHTMLX Suite 9.2 重磅发布:支持历史记录、类Excel交互、剪贴板、拖放增强等多项升级
javascript·excel·交互·表格·dhtmlx·grid·网格
小阳睡不醒2 天前
小白成长之路-Elasticsearch 7.0 配置
大数据·elasticsearch·excel
奋进的孤狼2 天前
【Excel】使用vlookup函数快速找出两列数据的差异项
excel
不讲废话的小白2 天前
解锁高效Excel技能:摆脱鼠标,快速编辑单元格
计算机外设·excel
CodeCraft Studio2 天前
Excel处理控件Aspose.Cells教程:使用 Python 在 Excel 中创建甘特图
python·excel·项目管理·甘特图·aspose·aspose.cells