我创建了一个程序,可以从autocad获取对象(例如线,块(,然后使用VBA分析对象,然后将分析结果写入Excel工作簿。我使用 VBA,因为它在 excel 中可用。但是从VBA到excel和VBA到autocad的通信速度一直很慢。我正在考虑使用 pyautocad。在我深入研究一门新语言之前,我想得到一些建议,如果pyautocad比VBA更快,特别是在与autocad和excel通信时。
我已经粘贴了下面代码的一小部分,以便您了解我如何使用Autocad和excel。我对其他几个对象也有相同的过程。问题是当我对 autocad 需要的所有对象执行此操作时,此过程需要花费大量时间。
从Autocad读取和写入Excel的示例代码:
'-----------------Select all lines------------
'set variables to be used
Set MySelection = acadDoc.SelectionSets.Add("MySelection")
FilterType(0) = 0: FilterData(0) = "line" 'object type
FilterType(1) = 8: FilterData(1) = "MyLayer" 'layer name
'select all the lines in acad
MySelection.Select acSelectionSetAll, , , FilterType, FilterData
'---------------
LineWB.Worksheets(CurrentWorkSheet).Range("A1") = MySelection.Count
'---iterate through the selection and update or make pipes in the database-----
For x = 0 To MySelection.Count - 1
Set AcadLineVar = MySelection.Item(x)
CellVar = "A" & x + 5
LineWB.Worksheets(CurrentWorkSheet).Range(CellVar) = AcadLineVar.StartPoint(0)
CellVar = "B" & x + 5
LineWB.Worksheets(CurrentWorkSheet).Range(CellVar) = AcadLineVar.StartPoint(1)
CellVar = "C" & x + 5
LineWB.Worksheets(CurrentWorkSheet).Range(CellVar) = AcadLineVar.StartPoint(2)
CellVar = "D" & x + 5
LineWB.Worksheets(CurrentWorkSheet).Range(CellVar) = AcadLineVar.EndPoint(0)
CellVar = "E" & x + 5
LineWB.Worksheets(CurrentWorkSheet).Range(CellVar) = AcadLineVar.EndPoint(1)
CellVar = "F" & x + 5
LineWB.Worksheets(CurrentWorkSheet).Range(CellVar) = AcadLineVar.EndPoint(2)
Next x
'-----------
从Excel读取到Autocad的示例代码:
'Get Properties
InterfacePropVar = BlocksWB.Worksheets("Interface").Range("D5:M100000")
'-----For interface tags-----
NumberOfInterface = BlocksWB.Worksheets("Interface").Range("A1")
For a = 1 To NumberOfInterface
PtS(0) = InterfacePropVar(a, 1) + 5
PtS(1) = InterfacePropVar(a, 2) + 5
PtS(2) = InterfacePropVar(a, 3)
Name = InterfacePropVar(a, 4)
Set TextVar = acadDoc.ModelSpace.AddText(Name, PtS, 3)
TextVar.Layer = "InterfaceTagLayer"
TextVar.Color = acRed
'-----
Next a
'-----
我在AutoCAD和Excel之间运行了一个宏,发现所有主要耗时的事情都是VBA读取和写入AutoCAD和Excel的次数超过绝对必要的次数。 如果您可以在大量的单个步骤中完成所有装载和卸载,那确实可以节省时间。 我个人会在切换语言之前先采用这种方法,因为用户(你(自己的学习曲线。 但话又说回来,如果你想学习 Python,也许这是你的机会......