CAD二次开发(VB)代码整理

本文分享了作者在CAD二次开发中常用的VB代码,包括CAD与Excel数据交互,实现表格的导入导出;面积统计功能,用于计算地形图中建筑拆迁面积;以及图框替换技巧,应对图框信息变更。这些实用代码能显著提高设计效率。
摘要由CSDN通过智能技术生成

    有时工作中在CAD上一笔一划设计图纸的重复动作,为了提高设计效率,我闲暇之余经常自己搞弄CAD二次开发,现在整理了一些平时项目中常用到的程序供大家参考使用,基本都是手打哦。

文章包含代码:

CAD连通Excel数据

面积统计

图框替换


CAD连通Excel数据

    很多Excel中计算后的新成果需要与CAD上工程量、坐标信息等表格来回修改,数据都是有的,那么如何编写代码实现这一的粘贴复制呢?

    首先,编写将Excel表格导入CAD中显示为直线与文字的组合,其思路是:获得Excel中行数、列数及间距,按照相应比例绘制表格横竖线,然后读取Excel数据对应位置写入为CAD文字。

Sub E_cad()
    Dim mybook As Object
    Dim mySheet As Object
    Dim txt As String
    Dim name As String
    Set mybook = ExcelBookOpen("d:\l-hang.xlsx")
    For n = 1 To 19
        Set mySheet = mybook.Sheets(n)
        colcount = mySheet.UsedRange.Columns.Count
        rowcount = mySheet.UsedRange.Rows.Count
        name = mySheet.cells(1, colcount)
        AcadText name, colcount * 8.5, -(n - 1) * 100 + 5, 5
        For col = 1 To colcount - 1         
            ColsW = ColsW + mySheet.Columns(col).ColumnWidth    '表格总列宽
        Next
        
        RowsH = (rowcount - 1) * 4.7 + 9.4                      '总高度
        AcadLine 0, -(n - 1) * 100 - RowsH, RowsH, 90, acBlue   '画初始竖线
        AcadLine 0, -(n - 1) * 100 - RowsH, ColsW, 0, acBlue    '画底部横线

        For col = 1 To colcount - 1
            ColW = mySheet.Columns(col).ColumnWidth             '单列宽
            For row = 1 To rowcount
                txt = mySheet.cells(row, col)
                If Len(txt) - Len(Replace(txt, ".", "")) >= 1 Then  '控制小数点位
                    txt = Format(txt, "0.00")
                End If
                ORowsH = mySheet.Rows(row).RowHeight            '单横高
                If row = 1 Then
                    AcadText txt, jColW + ColW / 2, -(n - 1) * 100 - ORowsH / 2, 3.5
                ElseIf row > 1 Then
                    AcadText txt, jColW+ColW/2, -(n - 1) * 100 - jRowH - ORowsH / 2, 3.5
                End If
                If col = 1 And row = 1 Then
                    AcadLine 0, -(n - 1) * 100, ColsW, 0, acBlue '画每行横线
                ElseIf col = 1 And row > 1 Then
                    AcadLine 0, -(n - 1) * 100 - 9.4 - (row - 2) * 4.7, ColsW, 0, acMagenta
                End If
                jRowH = jRowH + ORowsH
            Next
            jColW = jColW + ColW                                '累加列宽
            jRowH = 0
                If col = colcount - 1 Then                      '最后竖线
                    AcadLine jColW, -(n-1)*100 - RowsH, RowsH, 90, acBlue
                Else
                    AcadLine jColW, -(n-1)*100 - RowsH, RowsH, 90, acMagenta   '每列竖线
                End If
        Next
        jRowH = 0 : jColW = 0 : ColsW = 0
    Next
End Sub

Public Function ExcelBookOpen(FilePath As String)
    Dim o_Excel As Object
    Dim o_book As Object
    Set o_Excel = CreateObject("Excel.Application")     '建立电子表格实例
    o_Excel.Visible = True                              '设置可见
    Set o_book = o_Excel.Workbooks.Open(FilePath, 0)    '打开文件
    Set ExcelBookOpen = o_book                          '返回对象
End Function

Public Function AcadText(sText As String, X, y, h)      ' 添加单行文字
    Dim o_Text As Object
    Dim Location(0 To 2) As Double
    Location(0) = X
    Location(1) = y
    Set o_Text = ThisDrawing.ModelSpace.AddText(sText, Location, h)
    ' o_Text.Rotation = 0                   '角度
    o_Text.Alignment = 10                   '对齐方式(正中)
    o_Text.TextAlignmentPoint = Location    '对齐到指定点
    'o_Text.ObliqueAngle = 0                '倾斜
    o_Text.ScaleFactor = 0.75               '宽度因子
    o_Text.StyleName = "HZ"
    o_Text.color = acMagenta
    o_Text.Update
    Set AcadText = o_Text
End Function

Sub AcadLine(X, y, l, R, yanse)             '创建直线。x,y为起点坐标 ,l为长度,r为角度
    Dim o_Line As Object
    Dim x2 As Double
    Dim y2 As Doubl
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

库库冲鸭

你的鼓励将是我创作的最大动力

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

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

打赏作者

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

抵扣说明:

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

余额充值