例子
下面这段 VB 代码演示了如何通过集合对象逐级获取树节点,并说明了 IHNodeCol 的两种访问方式:遍历与显式索引。
vb
复制
Sub GetCollectionExample(ByVal ihAPsim As Happ.IHapp)
' 示例:使用集合对象获取根节点的下一级
Dim ihRoot As Happ.IHNode '根节点
Dim ihcolOffspring As Happ.IHNodeCol '子节点集合
Dim ihOffspring As Happ.IHNode '单个节点
Dim strOut As String
On Error GoTo ErrorHandler
'1. 取根节点
ihRoot = ihAPsim.Tree
'2. 取根节点下一级集合(Data、Unit Table、Settings)
ihcolOffspring = ihRoot.Elements
'3. 遍历方式:For Each … Next
strOut = ""
For Each ihOffspring In ihcolOffspring
strOut = strOut & vbCrLf & ihOffspring.Name
Next
MsgBox "Offspring nodes are:" & strOut, , "GetCollectionExample"
Exit Sub
ErrorHandler:
MsgBox "GetCollectionExample 报错:" & Err.Description
End Sub
集合访问的两种写法
- 遍历:
vb
复制
- 显式索引(Item 为默认属性,可省略):
vb
复制
-
节点名称区分大小写。
-
Dimension 决定 Item 需要的参数个数: – 若
Dimension = 1:只需 1 个参数,如"Data"– 若Dimension = 2:需 2 个参数,如ihcolOffspring("Data", "id2")
用Python来解释
1.连接Aspen
import win32com.client as win32
import os
VERSION_NUMBER = "34.0" # 对应 V14
prog_id = f"AspenPlus.Document.{VERSION_NUMBER}" # 进程外服务器
# 新建空白模拟
ap = win32.Dispatch(prog_id)
ap.InitNew2()
# 如果打开已有文件
# ap = win32.GetObject(r"完整路径\xxx.bkp")
- 取根节点并遍历第一层
root = ap.Tree # HappLS.Tree -> IHNode
col = root.Elements # IHNodeCol
for node in col: # For Each … Next 的 Python 版
print(node.Name)
- 显式取子节点(Dimension=1 时)
- 继续往深处钻
Python
复制
blocks_col = data_node.Elements("Blocks").Elements
b6 = blocks_col("B6") # 取出 RadFrac 模块 B6
input_node = b6.Elements("Input")("NSTAGE") # 塔板数节点
print(input_node.Value) # 读/写均可
- 运行、保存、退出
- 错误处理