我试图获得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"))
这个问题可以解决吗?!!
答案 0 :(得分:0)
我已经将对象的句柄替换为对象的对象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")
这应该避免未知句柄错误的来源。