与autocad和excel通信时VBA与pyautocad的速度

与autocad和excel通信时VBA与pyautocad的速度,vba,excel,autocad,Vba,Excel,Autocad,我创建了一个程序,该程序从autocad获取对象,例如直线、块,然后使用VBA分析对象,然后将分析结果写入excel工作簿。我使用VBA是因为它在excel中可用。但是,从VBA到excel和VBA到autocad的通信速度一直很慢。我正在考虑使用pyautocad。在深入研究一种新语言之前,我想知道pyautocad是否比VBA快,特别是在与autocad和excel通信时 我在下面粘贴了一小部分代码,以便您了解我如何使用autocad和excel。对于其他几个对象,我有相同的过程。问题是,当

我创建了一个程序,该程序从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,也许这是你的机会…

请发布你使用的部分或全部代码,以便StackOverflow社区成员可以看到,在提高速度方面是否有什么不太可能的成果?我添加了一些示例代码。我认为问题在于com互操作。我同意。我读到这是因为COM互操作。我选择.NETFramework。