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 连接
import win32com.client
swApp = win32com.client.Dispatch(\”SldWorks.Application\”)
swApp.Visible = True
print(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 # 配置管理
核心操作对照表
| 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 零件中的尺寸参数,重建并保存。
\”\”\”
import win32com.client
def update_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)
if not swModel:
print(f\”无法打开: {
filepath}\”)
return False
for dim_name, new_value in dim_updates.items():
# SolidWorks 内部单位是米
swModel.Parameter(dim_name).SystemValue = new_value
# 强制重建
swModel.EditRebuild3()
swModel.Save3(0, 0, 0)
swApp.CloseDoc(swModel.GetTitle())
print(f\”更新完成: {
filepath}\”)
return True
# 使用示例
update_dimensions(
r\”D:\\Projects\\RobotArm\\CylinderBracket_Base.SLDPRT\”,
{
\”D1@草图1\”: 0.200, # 底座长度 175→200
\”D2@草图1\”: 0.040, # 底座宽度 40(不变)




