You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

ETABS Python API调用SetUser创建自定义反应谱返回错误码-99求助

ETABS Python API调用SetUser创建自定义反应谱返回错误码-99求助

我之前也踩过ETABS API返回-99的坑,这个错误码基本指向参数类型不兼容或者数据格式不符合API要求——毕竟ETABS的COM接口对数据类型的要求特别严苛,不像Python这么灵活。咱们一步步来排查你的问题:

首先看你的代码,问题大概率出在传递给SetUser的数组参数上。ETABS的COM API要求传入的数组必须是COM兼容的安全数组(SAFEARRAY),但你直接传了Python原生列表,这就会导致类型不匹配,触发-99错误。

给你几个可行的解决思路:

  • 转换数组为COM兼容类型:用comtypes自带的工具把Python列表转换成对应的SAFEARRAY。比如浮点数数组可以用comtypes.automation.SAFEARRAY配合VT_R8(双精度浮点数类型)包装,修改后的代码片段如下:
import comtypes.client
from comtypes.automation import SAFEARRAY, VT_R8

# ... 前面的ETABS连接代码保持不变 ...

# 将Python列表转换为COM安全数组
periodos_safe = SAFEARRAY(VT_R8, periodos)
aceleraciones_safe = SAFEARRAY(VT_R8, aceleraciones)

ret = SapModel.Func.FuncRS.SetUser(nombre_espectro, len(periodos), periodos_safe, aceleraciones_safe, damp_ratio)
T, A, st = ret

if st != 0:
    print(f"Error al crear el espectro. Código de retorno: {st}")
else:
    print("Espectro creado exitosamente!")
  • 确认参数细节合理性:再核对下SetUser的参数逻辑:

    • 周期数组必须是严格递增的,你的测试数据[0.0, 0.1, 0.2, 0.5, 1.0, 2.0]符合要求,这部分没问题;
    • 阻尼比的取值范围要在0到1之间,你的0.05是合规的;
    • 参数顺序完全匹配API文档定义:名称→数据点数量→周期数组→加速度数组→阻尼比,这部分你也没出错。
  • 排查版本兼容性:不同版本的ETABS API可能有细微差异,比如你用的是ETABS 2016还是2021?可以打开安装目录里的ETABSAPI.chm帮助文档,核对FuncRS.SetUser的参数定义,确保完全匹配。

另外你提到手动导入文件没问题,如果后续想尝试SetFile方法,要注意必须传入完整绝对路径,且用原始字符串避免转义问题,比如r"C:\Users\yourname\spectrum.txt"。

你可以先试试数组转SAFEARRAY的方案,这是解决这类-99错误最常见的办法。如果还是不行,直接查ETABS API帮助文档里的错误码说明,里面会有更精准的原因描述。

备注:内容来源于stack exchange,提问作者nachopac

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.14 15:29:35