Python Handle和HandelToObject在python和VBA宏中的矛盾

时间:2017-08-23 19:33:22

标签: python python-2.7 excel-vba autocad comtypes

我试图获得XRecords'借助于VBA宏和此answer中提供的python函数,python脚本中的数据[DXF组代码+值]。

在python中,我使用Handle属性获取XRecord的句柄,但是,并非所有XRecords都成功返回其数据,并且在该行处抛出未知句柄错误在VBA宏中Set myXRecord = mydoc.HandleToObject(handler)

我已经找到了解释,其中一个是this one,但我的情况不同,因为它首先采用XRecord的句柄然后供应因此,没有假设如何在AutoCAD绘图中创建手柄。

那么, XRecord如何返回其处理,然后HandleToObject方法无法从其Handle属性的值中找到XRecord?!

修改: -

我想问题是HandleToObject本身,我得到python来预览调用错误的句柄(比如" 3E7")然后我打开图纸并得到XRecord'在AutoCAD的命令行中使用entget从普通(entget (handent "3E7"))预览中获取数据,结果是成功的。

((-1 . <Entity name: 7ff649f06e70>) (0 . "XRECORD") (5 . "3E7") (102 . "{ACAD_REACTORS") (330 . <Entity name: 7ff649f06e20>) (102 . "}") (330 . <Entity name: 7ff649f06e20>) (100 . "AcDbXrecord") (280 . 1) (1 . "Wall1"))

这个问题可以解决吗?!!

1 个答案:

答案 0 :(得分:0)

注意:这不是解决方案,而是另一种参考XRECORDS的方法

我已经将对象的句柄替换为对象的对象ID ,然后我获取了vba宏的副本,将复制的宏重命名为 “getfromid”,获取XRecord_return的副本,将副本重命名为XRecord_return_1,然后进行如下微小更改: -

在vba宏getfromid

1-转到第Set myXRecord = mydoc.HandleToObject(handler)行并将HandleToObject替换为ObjectIDToObject

2-将Dim name2 As String更改为Dim name2 As String, handler As LongPtr

在python函数XRecord_return_1

1-将行xl.Application.Run("facilitator.xlsm!mod_facilitate.getxrecord")更改为xl.Application.Run("facilitator.xlsm!mod_facilitate.getfromid")

这应该避免未知句柄错误的来源。