張培媛 秦少東

摘要:針對工作實際中批量制作設備銘牌的需要,采用Excel與AutoCAD相結合的方法,利用Visual Basic將兩個軟件建立連接。Excel表格中列出需要制作銘牌的各項信息,AutoCAD利Visual Basic編寫的程序將用Excel中內容放在指定的位置,從而實現批量制作銘牌。
關鍵詞:批量制作銘牌;AutoCAD;Visual Basic;二次開發
中圖分類號:TP391.7 文獻標識碼:A 文章編號:1007-9416(2020)02-0122-02
0 引言
AutoCAD是現在使用人數最多的CAD軟件,其交互菜單和命令行的設計使得很多非計算機專業人員也能很快入門這個軟件,從而提高工作效率。在我們平時的工作中,每個行業都有其特殊的一些重復工作,這時就可以利用AutoCAD的二次開發,快速而準確的完成這些重復工作。
1 準備數據與圖形模板
先按照Excel表格中的字段名稱A列序號,B列為設備名稱,C列為規格型號,D列為制造廠家,E列為出廠日期,F列為出廠編號。在CAD中繪制一個示例模板,以為之后的批量制作提供參考[1-3]。表格中共有5個制作銘牌使用的相關信息,即設備名稱,規格型號,制造廠家,出廠日期和出廠編號,據此畫出圖1所示的模板。繪制此模板需要注意,模板邊框是多段線,方便之后復制時設置選擇條件。
2 編寫程序
2.1 編寫Excel與AutoCAD連接程序,獲取銘牌內容
激活要與之通信的Excel應用程序,通過定位獲取表格的最后行數,將表中數據放入數組中。主要程序如下:
Set ExcelApp = CreateObject("excel.application")
lj = ExcelApp.Application.GetOpenFileName _
(FileFilter:="制作銘牌的數據 ,*.xlsx; *.xlsm; *.xlsb;*.xls")
ExcelApp.Workbooks.Open (lj)
ExcelApp.Visible = 1
ExcelApp.ScreenUpdating = False
Set excelsheet = ExcelApp.ActiveWorkbook.sheets("數據表格")
endA = excelsheet.usedrange.Rows.Count
arrex = ExcelApp.ActiveWorkbook.sheets("數據表格").range("A2:F" & endA)
2.2 過濾目標多段線
由于一個圖紙中可能會出現多種規格的銘牌,所以針對目標銘牌模板,可以建立一個選擇集,由用戶在屏幕框選,目標是獲取其選擇內容中多段線,同時獲取到該多段線的外邊框最大最小坐標。主要程序如下:
Set SSetbh = ThisDrawing.SelectionSets.Add("K_SSET")
fType1(0) = 0: fData1(0) = "LWPOLYLINE"
SSetbh.SelectOnScreen fType1, fData1
Set Ent = SSetbh.Item(0)
Ent.GetBoundingBox minExt, maxExt
2.3 批量繪制銘牌
利用獲取到數組中的數據,結合步驟1中提供的銘牌模板,由用戶指定排圖的起點坐標從而確定排圖位置,實現將獲取的數據批量繪制到圖形文件中。在本例中設置的參數為圖紙間隔是20,插入文件距離底邊是10,每行間距都是10,文字高度是3,寫文字的框寬度是55。需要注意的是Y向是間距加文字高度。主要程序如下:
For i = 1 To UBound(arrex)
Sbmc = arrex(i, 2) '設備名稱
Ggxh = arrex(i, 3) '規格型號
Zzcj = arrex(i, 4) '制造廠家
Ccrq = arrex(i, 5) '出廠日期
Ccbh = arrex(i, 6) '出廠編號
For Each sset1Entity In SSetyd
Set CopyEntity = sset1Entity.Copy()
point1(0) = minExt(0): point1(1) = minExt(1)
If i = 1 Then
point2(0) = ptget(0): point2(1) = ptget(1)
End If
CopyEntity.Move point1, point2
Next
根據模板的文字高度與間距設置插入點的橫向與縱向坐標。需要將其x向,y向,z向的坐標全部寫出,其中y向坐標需要根據文字高度和間距進行遞減,本例中遞減量是10。以設備名稱與型號為例,主要程序如下:
Sbmc_insertPt(0) = point2(0) + 30
Sbmc_insertPt(1) = point2(1) + 50
Sbmc_insertPt(2) = 0
Ggxh_insertPt(0) = point2(0) + 30
Ggxh_insertPt(1) = point2(1) + 40
Ggxh_insertPt(2) = 0
定好坐標后,可以插入文字,以設備名稱為例,程序如下:
Set textObj = ThisDrawing.ModelSpace.AddMText(Sbmc_insertPt, 55, Sbmc)
3 繪制結果確認
核對批量繪制的結果,若是第一次運行程序需要仔細核對五種信息對應的位置,字體的大小與間距,每個銘牌之間的間距,排列的總長度是否超出要求的尺寸以及銘牌上內容的書寫是否美觀等[4]。如果有大批量的銘牌需要繪制,可以在第2.3步設置橫坐標的程序部分按需要進行改動,例如每25個位于一行。
4 結語
上述代碼除了對銘牌的批量繪制,還可用于其他類似用表格數據批量繪制CAD圖形的情況。調試程序到符合自己的工作需要后,可以將文件存儲為.dvb文件,別的電腦使用時在命令行輸入vbaload將此文件加載后,輸入vbarun,在出現的界面中選擇本程序,然后運行即可。通過對AutoCAD的二次開發,可以高效準確的完成平時工作中的批量重復工作,提高人員的工作效率。
參考文獻
[1] 張帆,鄭立楷,盧擇臨,等.AutoCAD VBA 二次開發教程[M].北京:清華大學出版社,2006.
[2] 張帆,鄭立楷,王華杰.AutoCAD VBA 開發精彩實例教程[M].北京:清華大學出版社,2004.
[3] Excel Home.別怕,Excel VBA其實很簡單[M].北京:人民郵電出版社,2012.
[4] 羅剛君.Excel VBA程序開發自學寶典(第2版)[M].北京:電子工業出版社,2011.
Batch Drawing Equipment Nameplates Based on AutoCAD Secondary Development
ZHANG Pei-yuan1, QIN Shao-dong2
(1.Zhongwang(Liaoyang) Aluminum Formwork Manufacturing Co., Ltd., Liaoyang? Liaoning? 111000;
2.Liaoning Zhongwang Group Co., Ltd., Liaoyang? Liaoning? 111000)
Abstract:To meet the needs of batch production of equipment nameplates in practice, the method of combining Excel and AutoCAD is used, and Visual Basic is used to connect the two software. The Excel table lists all the information needed to make nameplates. Programs written in AutoCAD and Visual Basic will use the contents of Excel to be placed in designated locations, so as to make batches of nameplates.
Key words:nameplate production in batches; AutoCAD; Visual Basic; secondary development