我试图借助VBA宏和这个XRecords中提供的python函数,在python脚本中获取回答的数据DXF组代码+值。
在python中,我使用XRecord属性获取Handle句柄,然而,并不是所有XRecords都成功地返回了它们的数据,并且在VBA宏的Set myXRecord = mydoc.HandleToObject(handler)行中抛出了一个未知句柄错误。
我寻找了一个解释,其中一个是这一个,但我的情况不同,因为它首先使用XRecord的句柄,然后提供它,因此,对于如何在AutoCAD绘图中创建句柄,不作任何假设。
那么,一个HandleToObject如何返回它的句柄,那么方法就无法从它的 Handle 属性的值中找到XRecord?!
编辑:-
我猜问题在于HandleToObject本身,我让python预览调用错误的句柄(例如"3E7"),然后打开绘图,使用entget命令行中的(entget (handent "3E7"))从普通的(entget (handent "3E7"))预览中获取XRecord的数据,结果是成功的。
((-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"))这个问题有什么解决办法吗?!!
发布于 2017-08-24 10:47:59
注意:这不是一个解决方案,这是另一种引用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")
这应该避免未知句柄错误的来源。
https://stackoverflow.com/questions/45847990
复制相似问题