将该值转换到另一套单位

你可以用 ValueForUnit 属性按指定单位获取数值。 ValueForUnit 接受两个参数:想要的单位表行号(物理量)和单位表列号(单位符号)。

单位换算示例 同时读取模块 B3 的压力:

  • 当前显示单位(psia)

  • 目标单位 atm(在单位表第 3 列)

Sub UnitsConversionExample(ByVal ihAPSim As Happ.IHapp)
' 本例同时获取显示单位(psia)与目标单位(atm)下的压力值
Dim ihPres As Happ.IHNode
Dim nRow As Long, nCol As Long
Dim strDisplayUnits As String, strConvertedUnits As String
On Error GoTo ErrorHandler
    Set ihPres = ihAPSim.Tree.Data.Blocks.B3.Output.B_PRES

    ' 取得当前显示单位的行列号(psia)
    nRow = ihPres.AttributeValue(Happ.HAPAttributeNumber.HAP_UNITROW)
    nCol = ihPres.AttributeValue(Happ.HAPAttributeNumber.HAP_UNITCOL)
    strDisplayUnits = UnitsString(ihAPSim, nRow, nCol)

    ' 换成目标单位列 atm(第 3 列)
    nCol = 3
    strConvertedUnits = UnitsString(ihAPSim, nRow, nCol)

    MsgBox "Pressure in Display units: " & ihPres.Value & _
      " " & strDisplayUnits & vbCrLf & _
      "Pressure in Converted units: " & _
      ihPres.ValueForUnit(nRow, nCol) & " " & strConvertedUnits, _
      , "UnitsConversionExample"
Exit Sub
ErrorHandler:
    MsgBox "UnitsConversionExample raised error " & Err.Description
End Sub

' 辅助:根据行列号返回单位符号
Public Function UnitsString(ByVal ihAPSim As Happ.IHapp, _
  ByVal nRow As Long, ByVal nCol As Long)
On Error GoTo UnitsStringFailed
    UnitsString = ihAPSim.Tree.Elements("Unit Table"). _
        Elements(nRow - 1).Elements.Label(0, nCol - 1)
    Exit Function
UnitsStringFailed:
    UnitsString = ""
End Function

读取 B3 模块压力,同时显示当前单位(psia)与目标单位 atm

import win32com.client as win32

# ---------- 常量 ----------
HAP_UNITROW = 3          # 物理量行号
HAP_UNITCOL = 4          # 单位列号

# ---------- 辅助:根据行列号取单位符号 ----------
def units_string(ap, row, col):
    """
    row, col 都是 1-based,访问集合时要减 1
    """
    try:
        return ap.Tree.Elements("Unit Table").Elements(row - 1).Elements.Label(0, col - 1)
    except Exception:
        return ""

# ---------- 主逻辑 ----------
def units_conversion_example(ap):
    pres = ap.Tree.Data.Blocks.B3.Output.B_PRES   # 压力节点

    # 1. 当前显示单位
    row       = pres.AttributeValue(HAP_UNITROW)
    col       = pres.AttributeValue(HAP_UNITCOL)
    cur_unit  = units_string(ap, row, col)
    cur_val   = pres.Value

    # 2. 目标单位 atm(已知在单位表第 3 列)
    tgt_col   = 3
    tgt_unit  = units_string(ap, row, tgt_col)
    tgt_val   = pres.ValueForUnit(row, tgt_col)

    # 3. 结果
    msg = (f"Pressure in display units : {cur_val} {cur_unit}\n"
           f"Pressure in converted units: {tgt_val} {tgt_unit}")
    print(msg)          # 也可改用 tkinter.messagebox.showinfo
    return msg

# ---------- 调用示例 ----------
if __name__ == "__main__":
    ap = win32.Dispatch("AspenPlus.Document.34.0")
    ap.InitNew2()                    # 或 GetObject 打开已有文件
    units_conversion_example(ap)
    ap.Quit()