EXCEL VBA读取DXF文件

因业务要求,需要读取DXF文件

开发环境:Excel 2013

Option Explicit
    
Dim dxfFile As String

Dim linesCount As Integer
'Start Point(x,y)、End Point(x,y)
'Parameters count: 4 Double
Dim Lines()

Dim circlesCount As Integer
'Arc Center(x,y)、Radius
'Parameters count: 3 Double
Dim Circles()

Dim arcsCount As Integer
'Arc Center(x,y)、Radius、StartAngle、EndAngle
'Parameters count: 5 Double
Dim Arcs()
    

'redim 将数组的数值也初始化了
Sub GetDXFEntities(ByVal maxCount As Integer)
    ReDim Lines(maxCount, 4) As Variant
    ReDim Circles(maxCount, 3) As Variant
    ReDim Arcs(maxCount, 5) As Variant

    linesCount = 0
    circlesCount = 0
    arcsCount = 0

    Dim strSection As String
    
    dxfFile = "input.dxf"
    strSection = "ENTITIES"
    
    Dim lastObj As String
    
    linesCount = 0
    
    Dim codes As Variant
    
    Open dxfFile For Input As #1
    ' 获取第一个代码/值对
    codes = ReadCodes()
    ' 遍历整个文件,直到“EOF”行
    While codes(1) <> "EOF"
        ' 如果组码为“0”,并且值为“SECTION”,则
        If codes(0) = "0" And codes(1) = "SECTION" Then
            ' 这必须是一个新的段,以便获取下一个代码/值对。
            codes = ReadCodes()
            ' 如果此段是要获取的段,则
            If codes(1) = strSection Then
                ' 获取下一个代码/值对,并
                codes = ReadCodes()
                ' 遍历此段,直到“ENDSEC”
                While codes(1) <> "ENDSEC"
                    ' 在某一段中,所有的“0”代码都表示对象。如果找到了“0”代码,则存储
                    ' 对象名称,供以后使用。
                    If codes(0) = "0" Then lastObj = codes(1)
                    ' 如果此对象是用户所需的对象,
                    If lastObj = "LINE" Then
                        If codes(0) = 5 Then
                            linesCount = linesCount + 1
                        ElseIf codes(0) = 10 Then
                            Lines(linesCount, 1) = codes(1)
                        ElseIf codes(0) = 20 Then
                            Lines(linesCount, 2) = codes(1)
                        ElseIf codes(0) = 11 Then
                            Lines(linesCount, 3) = codes(1)
                        ElseIf codes(0) = 21 Then
                            Lines(linesCount, 4) = codes(1)
                        End If
                    ElseIf lastObj = "CIRCLE" Then
                        If codes(0) = 5 Then
                            circlesCount = circlesCount + 1
                        ElseIf codes(0) = 10 Then
                            Circles(circlesCount, 1) = codes(1)
                        ElseIf codes(0) = 20 Then
                            Circles(circlesCount, 2) = codes(1)
                        ElseIf codes(0) = 40 Then
                            Circles(circlesCount, 3) = codes(1)
                        End If
                    ElseIf lastObj = "ARC" Then
                        If codes(0) = 5 Then
                            arcsCount = arcsCount + 1
                        ElseIf codes(0) = 10 Then
                            Arcs(arcsCount, 1) = codes(1)
                        ElseIf codes(0) = 20 Then
                            Arcs(arcsCount, 2) = codes(1)
                        ElseIf codes(0) = 40 Then
                            Arcs(arcsCount, 3) = codes(1)
                        ElseIf codes(0) = 50 Then
                            Arcs(arcsCount, 4) = codes(1)
                        ElseIf codes(0) = 51 Then
                            Arcs(arcsCount, 5) = codes(1)
                        End If
                    End If
                    ' 读取其他代码/值对
                    codes = ReadCodes()
                Wend
            End If
        Else
            codes = ReadCodes()
        End If
    Wend
    Close #1
    
End Sub


' ReadCodes 从打开的文件中读取两行,并返回一个包含两个项目的数组、一个组码及其组码值。只要一次读取 DXF 文件中的两行代码,
' 所有程序应该都能够顺利运行。但为了使代码更可靠,应该添加一些进行错误检查和其他检查的代码。
Function ReadCodes() As Variant
    Dim codeStr, valStr As String
    Line Input #1, codeStr
    Line Input #1, valStr
    ' 修剪代码中的前导空格和后续空格
    ReadCodes = Array(Trim(codeStr), valStr)
End Function

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

qq_16215957

如果有帮助一杯咖啡奶茶均可

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值