Dynamo/Revit中如何通过名称而非索引号选取Schedule等元素
这个需求完全可以实现,不需要依赖动态变动的Dynamo列表索引号。
具体实现逻辑
你遇到的索引号变动问题,本质是因为Dynamo拉取Schedule列表时的顺序是跟着Revit内部的视图排序走的,一旦有Schedule被删除、新增或者调整排序,列表索引就会重排,靠索引选对象自然会错位。只要把选择逻辑从「按列表位置取」改成「按Schedule固有属性(名称)匹配」就能彻底解决问题,匹配逻辑和列表顺序完全无关,稳定性很高。
操作步骤
- 拉取当前Revit项目内的全部Schedule实例:原生节点可直接用
Schedules.Views节点实现,如果走Python代码的话,用RevitAPI的FilteredElementCollector筛选ViewSchedule类即可拿到全量Schedule。 - 给每个Schedule实例绑定它本身的
Name(名称)属性,做键值对映射。 - 传入你需要导出的目标Schedule名称,直接从映射结果里筛选对应名称的Schedule实例作为导出对象即可。
Python实现参考代码
如果要在你现有脚本的Python段里补这个逻辑,核心代码非常短:
import clr clr.AddReference('RevitAPI') from Autodesk.Revit.DB import FilteredElementCollector, ViewSchedule doc = __revit__.ActiveUIDocument.Document # 收集项目内所有Schedule all_schedules = FilteredElementCollector(doc).OfClass(ViewSchedule).ToElements() # 替换成你要导出的目标Schedule实际名称 target_sch_name = "你要导出的Schedule名称" # 按名称匹配目标对象 target_schedule = next(sch for sch in all_schedules if sch.Name == target_sch_name) OUT = target_schedule
注意:如果项目内存在重名Schedule,上述逻辑会返回第一个匹配到名称的实例,建议给需要批量导出的Schedule设置唯一命名,就可以完全避免匹配错误,不需要每次导出前人工核对选中的Schedule是否正确。
操作界面参考

内容的提问来源于stack exchange,提问作者alanWall
相关产品推荐
相关产品推荐

