Claude Code × SolidWorks 进阶:用 Python 替代 VBA 宏,实现真正的设计自动化
Claude Code × SolidWorks 进阶:用 Python 替代 VBA 宏,实现真正的设计自动化
摘要:VBA 宏适合单文件批处理,但面对跨工具链协作(参数化建模 → 仿真验证 → 报告生成)时力不从心。本文介绍通过 Python + win32com 直接调用 SolidWorks COM API,结合 Claude Code 生成生产级 Python 脚本,实现参数化驱动建模、批量导出与命名管理、装配体约束链自动构建、以及一键从 Excel 规格表生成全部零件和工程图的全自动化工作流。
关键词:SolidWorks API, Python, win32com, Claude Code, 参数化设计, 自动化建模
目录
- 为什么从 VBA 升级到 Python
- 环境配置
- Python COM API 基础
- 实战一:参数化驱动建模
- 实战二:批量导出 + 智能命名管理
- 实战三:装配体约束链自动构建
- 实战四:Excel 规格表 → 全自动生成零件 + 工程图
- 方案选择:VBA 还是 Python
为什么升级
VBA 宏有两个硬伤:
无法处理复杂数据结构。丝杠选型需要查表插值、做迭代优化——这在 VBA 里写起来像受刑。Python 直接上 pandas + scipy,三行代码搞定。
无法跨工具链协作。一个完整的设计流程是「Excel 规格表 → SolidWorks 建模 → 仿真软件跑载荷 → 生成设计报告」。VBA 只能锁死在 SolidWorks 进程里,Python 可以把这四个工具串成一条流水线。
升级之后,Claude Code 的代码生成能力才能最大化——Python 生态 + SolidWorks API 的组合,可做的事情比 VBA 宏大一个数量级。
环境配置
必要条件
- Windows 10/11 + SolidWorks 2020+
- Python 3.9+
pywin32包(提供 COM 接口)
pip install pywin32 pandas openpyxl验证 COM 连接
importwin32com.client swApp=win32com.client.Dispatch("SldWorks.Application")swApp.Visible=Trueprint(f"SolidWorks{swApp.RevisionNumber}连接成功")如果报com_error: (-2147221005, '无效的类字符串', ...),说明 SolidWorks 未注册 COM——重新以管理员权限运行一次 SolidWorks 安装程序选「修复」即可。
Python COM API 基础
SolidWorks COM API 的对象模型是层级结构:
SldWorks.Application # 顶层应用对象 ├── .ActiveDoc # 当前文档(零件/装配体/工程图) ├── .OpenDoc6() # 打开文件 ├── .NewDocument() # 新建文件 └── ModelDoc2 # 文档对象 ├── .SketchManager # 草图操作 ├── .FeatureManager # 特征操作(拉伸/切除/圆角) ├── .Extension # 扩展功能(属性/SaveAs) └── .ConfigurationManager # 配置管理核心操作对照表
| VBA | Python (win32com) |
|---|---|
Set swApp = Application.SldWorks | swApp = win32com.client.Dispatch("SldWorks.Application") |
swApp.OpenDoc6(path, ...) | swApp.OpenDoc6(path, 1, 0, "", 0, 0) |
swModel.Extension.CustomPropertyManager("") | swModel.Extension.CustomPropertyManager("") |
swModel.Save3(...) | swModel.Save3(0, 0, 0) |
MsgBox "done" | print("done") |
注意:Python 调用 COM 时不支持 VBA 的命名参数(swOpenDocOptions_Silent这类枚举),需要填入数字常量。查阅 SolidWorks API Help 中的swDocumentTypes_e等枚举表即可。
实战一:参数化驱动建模
场景:底座长度从 175 mm 改为 200 mm,安装孔距从 34 mm 改为 42 mm,自动重新建模、重建、保存。
不打开 SolidWorks GUI 手动改尺寸——用 Python 直接修改模型参数。
""" ParametricUpdate.py 修改已存在的 SolidWorks 零件中的尺寸参数,重建并保存。 """importwin32com.clientdefupdate_dimensions(filepath,dim_updates):""" filepath: .SLDPRT 文件路径 dim_updates: dict, {"D1@草图1": 0.200, "D2@基体-拉伸1": 0.042} """swApp=win32com.client.Dispatch("SldWorks.Application")swApp.Visible=False# 后台运行,不弹 GUI# 静默打开零件swModel=swApp.OpenDoc6(filepath,1,0,"",0,0)ifnotswModel:print(f"无法打开:{filepath}")returnFalsefordim_name,new_valueindim_updates.items():# SolidWorks 内部单位是米swModel.Parameter(dim_name).SystemValue=new_value# 强制重建swModel.EditRebuild3()swModel.Save3(0,0,0)swApp.CloseDoc(swModel.GetTitle())print(f"更新完成:{filepath}")returnTrue# 使用示例update_dimensions(r"D:\Projects\RobotArm\CylinderBracket_Base.SLDPRT",{"D1@草图1":0.200,# 底座长度 175→200"D2@草图1":0.040,# 底座宽度 40(不变)