尧图网站设计 尧图网站设计YAOTU DESIGN
ARTICLE DETAIL

资讯详情

深耕网站设计与一线实操的经验洞察。

SolidWorks宏一键批量转STEP、PDF、DWG:TaoToken统一Key打通自动化流水线

SolidWorks宏一键批量转STEP、PDF、DWG:TaoToken统一Key打通自动化流水线 1. 从一次真实的批量导出翻车说起SolidWorks 宏批量转 STEP PDF DWG 到底难在哪如果你在机械设计岗位待过大概率遇到过这种场景项目收尾甲方或下游工艺部门要三种格式——STEP 给仿真和 CAMPDF 给评审和归档DWG 给二维加工和线切割。你手上是一个装配体下面挂着几十个零件和对应的工程图。手动一个个打开、另存、选格式、改路径一个下午就没了还容易漏。我试过最笨的办法把零件拖进一个文件夹然后逐个文件 另存为STEP 选 AP214PDF 走工程图打印DWG 还得注意图层映射。三十个零件干到晚上九点第二天发现有两个装配体漏了返工。后来接触到 SolidWorks 宏VBA 宏才意识到这件事完全可以脚本化。宏能做的事比很多人想的多遍历文件夹、打开文件、判断文件类型、调用SaveAs指定格式、关闭文件、写日志。把这一套串起来就是一条本地自动化流水线。但这里有个容易被忽略的问题脚本一旦要调用外部服务比如把导出结果上传、做格式校验、调用模型接口做命名规范检查就会涉及凭证管理。你不可能把 API Key 硬编码在.swp宏里因为宏文件会被同事拷贝、会被版本管理、会泄露。这时候需要一个统一的 Key/API 通道来管理脚本调用凭证TaoToken 就是干这个的——一个 Key 走通多个模型和接口脚本里只引用环境变量或配置文件不暴露明文。这篇内容聚焦一件事用 SolidWorks 宏一次性把零件/装配体输出为 STEP、PDF、DWG 三种格式并给出可复制的宏代码、批量任务配置、导出结果校验步骤。适合谁适合每天和 SolidWorks 打交道、想把手动导出变成一键操作的机械工程师、工艺员、二次开发入门者。你不需要是 VBA 高手但需要能看懂基本的变量和循环。先说清楚边界宏需要根据你的实际目录结构、SolidWorks 版本、工程图模板做改动不能拿来直接跑。我会把关键参数标出来你改这几处就能用。2. TaoToken 前置准备统一 Key 与 API 通道在脚本流水线里的位置在讲宏代码之前先把凭证管理这件事说清楚否则后面脚本里到处是硬编码维护起来很痛苦。SolidWorks 宏本身是 VBA运行在本地。它可以直接读写文件、调用 Windows API、甚至发 HTTP 请求。当你的流水线需要做这些事时就会用到外部接口导出完成后调用一个模型接口检查文件命名是否符合企业规范把 STEP 文件路径和元数据写入一个远程清单用模型对话能力生成导出日志的自然语言摘要。这些调用都需要凭证。传统做法是在宏里写apiKey sk-xxxx问题是宏文件一旦分享出去Key 就泄露了。更合理的做法是把 Key 放在环境变量或独立配置文件里宏只读配置。TaoToken 提供统一 Key 和 API 通道官网是 https://taotoken.net/?utm_sourcetaotoken_aicg_blog_endutm_mediumcsdnutm_campaignrewriteutm_content API 入口是 https://taotoken.net/api 。它的价值在于你不需要为每个模型或服务单独申请一套凭证一个 Key 就能覆盖多个调用场景脚本里只维护一个配置项。具体到操作层面你需要做三件事第一获取 Key。进入控制台创建 API Key地址是 https://taotoken.net/console?utm_sourcetaotoken_aicg_blog_endutm_contentconsoleutm_campaignrewrite 。创建后复制保存后面配置要用。第二确认你要调用的模型 ID。不同任务用不同模型比如命名规范检查用轻量模型就够复杂摘要用强一点的。模型列表在 https://taotoken.net/models?utm_sourcetaotoken_aicg_blog_endutm_contentmodelsutm_campaignrewrite 可以查。第三把 Key 和 Base URL 写进本地配置文件宏通过读取文件获取而不是硬编码。Base URL 用 https://taotoken.net/api 注意这个地址不带 UTM 参数是纯 API 入口。这里要强调一个原则宏负责本地文件操作外部调用走统一通道。两者解耦宏的逻辑才清晰。如果你只是做本地格式转换其实不需要任何外部调用宏自己就能完成。但一旦涉及校验、上传、日志汇总统一 Key 就能省掉大量重复配置。另外如果你的流水线里还要接入 Claude Code 做脚本辅助生成或者用 Coding Plan 做长期编码任务这些入口也是独立的模型对话https://taotoken.net/chat?utm_sourcetaotoken_aicg_blog_endutm_contentchatutm_campaignrewriteCoding Planhttps://taotoken.net/coding-plan?utm_sourcetaotoken_aicg_blog_endutm_contentcoding-planutm_campaignrewrite接入文档https://taotoken.net/doc?utm_sourcetaotoken_aicg_blog_endutm_contentdocutm_campaignrewriteAPI Keyshttps://taotoken.net/api-keys?utm_sourcetaotoken_aicg_blog_endutm_contentapi-keysutm_campaignrewrite这些不是必须的但如果你想把导出流水线扩展成「导出 校验 归档 通知」的完整链路提前把 Key 管理好会省很多事。3. 可复制配置SolidWorks 宏代码与批量任务参数这一节是核心。我会给出一个完整的宏结构包含遍历文件夹、打开文件、按扩展名分流、另存为三种格式、关闭文件、写日志。代码用 VBASolidWorks 宏编辑器直接能跑。先看整体思路弹出一个文件夹选择对话框让用户选源目录遍历该目录下所有.SLDPRT和.SLDASM文件对每个文件依次另存为 STEP、PDF、DWG工程图文件.SLDDRW单独处理导出 PDF 和 DWG每个文件处理完写一行日志记录成功或失败最后弹出汇总。关键参数我放在代码开头的常量区你改这几处即可。Option Explicit 用户可改参数 Const SOURCE_FOLDER_DEFAULT As String D:\SW_Export\Source 默认源目录 Const OUTPUT_FOLDER As String D:\SW_Export\Output 输出根目录 Const STEP_AP_VERSION As Integer 214 STEP AP214 Const EXPORT_PDF As Boolean True Const EXPORT_DWG As Boolean True Const EXPORT_STEP As Boolean True Const LOG_FILE As String D:\SW_Export\export_log.txt Dim swApp As SldWorks.SldWorks Dim swModel As SldWorks.ModelDoc2 Dim swExt As SldWorks.ModelDocExtension Dim fso As Object Dim logStream As Object Sub main() Set swApp Application.SldWorks Set fso CreateObject(Scripting.FileSystemObject) 确保输出目录存在 If Not fso.FolderExists(OUTPUT_FOLDER) Then fso.CreateFolder OUTPUT_FOLDER End If 打开日志 Set logStream fso.OpenTextFile(LOG_FILE, 8, True) logStream.WriteLine 导出开始 Now Dim srcFolder As String srcFolder PickFolder(SOURCE_FOLDER_DEFAULT) If srcFolder Then MsgBox 未选择文件夹退出。 Exit Sub End If Dim countOk As Integer, countFail As Integer countOk 0: countFail 0 ProcessFolder srcFolder, countOk, countFail logStream.WriteLine 导出结束 成功: countOk 失败: countFail logStream.Close MsgBox 导出完成。 vbCrLf 成功: countOk vbCrLf 失败: countFail vbCrLf 日志: LOG_FILE End Sub Sub ProcessFolder(folderPath As String, ByRef ok As Integer, ByRef fail As Integer) Dim file As Object For Each file In fso.GetFolder(folderPath).Files Dim ext As String ext UCase(fso.GetExtensionName(file.Name)) If ext SLDPRT Or ext SLDASM Then If ExportModel(file.Path, ok, fail) Then ok ok 1 Else fail fail 1 ElseIf ext SLDDRW Then If ExportDrawing(file.Path, ok, fail) Then ok ok 1 Else fail fail 1 End If Next file 递归子文件夹 Dim subF As Object For Each subF In fso.GetFolder(folderPath).SubFolders ProcessFolder subF.Path, ok, fail Next subF End Sub上面是主流程。下面是导出零件/装配体的函数核心是SaveAs指定格式。Function ExportModel(filePath As String, ByRef ok As Integer, ByRef fail As Integer) As Boolean Dim errs As Long, warns As Long Dim baseName As String baseName fso.GetBaseName(filePath) Set swModel swApp.OpenDoc6(filePath, swDocPART, swOpenDocOptions_Silent, , errs, warns) If swModel Is Nothing Then Set swModel swApp.OpenDoc6(filePath, swDocASSEMBLY, swOpenDocOptions_Silent, , errs, warns) End If If swModel Is Nothing Then logStream.WriteLine [FAIL] 无法打开: filePath ExportModel False Exit Function End If Set swExt swModel.Extension 导出 STEP If EXPORT_STEP Then Dim stepPath As String stepPath OUTPUT_FOLDER \ baseName .STEP Dim stepErr As Long stepErr swExt.SaveAs(stepPath, 0, 1, Nothing, swSaveAsOptions_Silent, Nothing, 0) If stepErr 0 Then logStream.WriteLine [OK] STEP: stepPath Else logStream.WriteLine [FAIL] STEP: filePath err stepErr End If End If 导出 PDF模型直接打印为 PDF If EXPORT_PDF Then Dim pdfPath As String pdfPath OUTPUT_FOLDER \ baseName .PDF Dim pdfErr As Long pdfErr swExt.SaveAs(pdfPath, 0, 1, Nothing, swSaveAsOptions_Silent, Nothing, 0) If pdfErr 0 Then logStream.WriteLine [OK] PDF: pdfPath Else logStream.WriteLine [FAIL] PDF: filePath err pdfErr End If End If swApp.CloseDoc swModel.GetTitle ExportModel True End Function工程图的导出逻辑略有不同因为 DWG 需要走SaveAs并指定 DXF/DWG 选项。Function ExportDrawing(filePath As String, ByRef ok As Integer, ByRef fail As Integer) As Boolean Dim errs As Long, warns As Long Dim baseName As String baseName fso.GetBaseName(filePath) Set swModel swApp.OpenDoc6(filePath, swDocDRAWING, swOpenDocOptions_Silent, , errs, warns) If swModel Is Nothing Then logStream.WriteLine [FAIL] 无法打开工程图: filePath ExportDrawing False Exit Function End If Set swExt swModel.Extension 导出 PDF If EXPORT_PDF Then Dim pdfPath As String pdfPath OUTPUT_FOLDER \ baseName .PDF swExt.SaveAs pdfPath, 0, 1, Nothing, swSaveAsOptions_Silent, Nothing, 0 logStream.WriteLine [OK] 工程图PDF: pdfPath End If 导出 DWG If EXPORT_DWG Then Dim dwgPath As String dwgPath OUTPUT_FOLDER \ baseName .DWG swExt.SaveAs dwgPath, 0, 1, Nothing, swSaveAsOptions_Silent, Nothing, 0 logStream.WriteLine [OK] 工程图DWG: dwgPath End If swApp.CloseDoc swModel.GetTitle ExportDrawing True End Function文件夹选择对话框用 Windows Shell API这里给一个简化版Function PickFolder(defaultPath As String) As String Dim shellApp As Object Set shellApp CreateObject(Shell.Application) Dim folder As Object Set folder shellApp.BrowseForFolder(0, 选择源文件夹, 0, defaultPath) If folder Is Nothing Then PickFolder Else PickFolder folder.Self.Path End If End Function把这几段拼进一个.swp宏模块在 SolidWorks 里工具 宏 新建粘贴保存运行main即可。关于配置文件的写法如果你要把 Key 和 Base URL 独立出来可以建一个config.json{ taotoken_base_url: https://taotoken.net/api, taotoken_api_key: 你的Key, model_id: 你的模型ID, export: { step: true, pdf: true, dwg: true, output_dir: D:\\SW_Export\\Output } }宏里读取这个 JSON 需要额外解析库简单做法是用Scripting.FileSystemObject读文本再字符串处理。如果你不想引入 JSON 解析用.ini格式更省事[taotoken] base_urlhttps://taotoken.net/api api_key你的Key model_id你的模型ID [export] step1 pdf1 dwg1 output_dirD:\SW_Export\OutputVBA 读 ini 可以用GetPrivateProfileStringAPI网上有现成封装。这样宏文件本身不含任何敏感信息可以安全地放进 Git 或共享盘。4. 验证请求与成功结果怎么确认三种格式都导出完整宏跑完不代表事情结束。批量导出最容易出的问题是文件生成了但内容是空的或者 STEP 只有壳体没有实体或者 PDF 缺页。所以必须做结果校验。第一步看日志。宏会在D:\SW_Export\export_log.txt里逐行记录。正常输出长这样 导出开始 2025/3/21 14:02:11 [OK] STEP: D:\SW_Export\Output\Bracket_A.STEP [OK] PDF: D:\SW_Export\Output\Bracket_A.PDF [OK] STEP: D:\SW_Export\Output\Housing.STEP [OK] PDF: D:\SW_Export\Output\Housing.PDF [OK] 工程图PDF: D:\SW_Export\Output\Housing_Drw.PDF [OK] 工程图DWG: D:\SW_Export\Output\Housing_Drw.DWG 导出结束 成功:6 失败:0 如果出现[FAIL]先看错误码。err1通常是路径不存在或权限问题err2可能是文件被占用。第二步检查文件大小。空 STEP 通常只有几 KB正常零件至少几十 KB。你可以写一个简单的校验脚本用 PowerShell 遍历输出目录Get-ChildItem D:\SW_Export\Output -File | ForEach-Object { $sizeKB [math]::Round($_.Length / 1KB, 2) if ($sizeKB -lt 5) { Write-Host 可疑小文件: $($_.Name) - $sizeKB KB -ForegroundColor Red } else { Write-Host $($_.Name) - $sizeKB KB } }第三步抽样打开。STEP 用 SolidWorks 或免费查看器打开确认实体数量PDF 看页数和图层DWG 用 CAD 打开检查线型和标注是否丢失。第四步如果你接了 TaoToken 做命名规范校验可以发一个请求验证。比如用 curl 测试通道是否通curl -X POST https://taotoken.net/api/v1/chat/completions \ -H Authorization: Bearer $TAOTOKEN_API_KEY \ -H Content-Type: application/json \ -d { model: 你的模型ID, messages: [{role: user, content: 检查文件名 Bracket_A 是否符合大驼峰规范}] }返回 200 且 choices 里有内容说明 Key 和通道正常。如果返回 401说明 Key 无效或没带上如果返回local proxy failed说明网络层有问题检查 Base URL 是否写成了https://taotoken.net/api而不是其他地址。成功结果的标准是日志无 FAIL、文件大小正常、抽样打开无异常、外部校验请求返回 200。四条都满足这条流水线就算跑通了。5. 本篇常见错排查401、local proxy failed、reading choices、OAuth 报错批量导出和接口调用混在一起时报错会来自两个层面SolidWorks 宏层面和 API 通道层面。分开看。401 Unauthorized。这是最常见的。原因通常是 Key 没传、传错、或者环境变量没生效。检查顺序先确认config.ini里api_key有值且没有多余空格再确认宏读取配置的路径正确最后用 curl 单独测一次。如果 curl 也 401就是 Key 本身的问题去控制台重新生成一个。local proxy failed。这个报错说明请求没到达服务端卡在本地网络层。常见原因是 Base URL 写错比如写成了带路径的https://taotoken.net/api/v1而实际应该用https://taotoken.net/api作为根。另一个原因是系统代理设置干扰检查环境变量HTTP_PROXY、HTTPS_PROXY是否指向了不可用的地址。清掉这两个变量再试。reading choices 报错。这通常出现在解析响应时代码期望choices[0].message.content但实际返回结构不同。先打印原始响应体看结构curl -s -X POST https://taotoken.net/api/v1/chat/completions \ -H Authorization: Bearer $TAOTOKEN_API_KEY \ -H Content-Type: application/json \ -d {model:你的模型ID,messages:[{role:user,content:test}]} | jq .如果jq报解析错误说明返回的不是 JSON可能是 HTML 错误页。检查 URL 是否完整、Content-Type 是否正确。OAuth 相关报错。如果你用的是 Claude Code 或类似工具接入可能会遇到 OAuth 流程问题。这类工具通常需要配置三件套Base URL、API Key、Model ID。以 Claude Code 为例配置文件里要写全{ base_url: https://taotoken.net/api, api_key: 你的Key, model: 你的模型ID }缺任何一个都会导致认证失败。如果你用的是 Codex 的auth.json结构类似{ api_key: 你的Key, base_url: https://taotoken.net/api, model: 你的模型ID }Cline MCP 的配置则在 settings 里{ mcpServers: { taotoken: { command: npx, args: [-y, 你的MCP包], env: { TAOTOKEN_BASE_URL: https://taotoken.net/api, TAOTOKEN_API_KEY: 你的Key, TAOTOKEN_MODEL: 你的模型ID } } } }三件套缺一不可。很多人只填了 Key 忘了 Model ID结果请求发出去模型为空报错信息又不直观。SolidWorks 宏层面的报错。SaveAs返回非 0 时对照错误码1 是通用失败2 是文件已存在且只读3 是路径无效。工程图导出 DWG 时如果报错检查工程图里是否有未解决的参考引用断开的参考会导致导出失败。文件被占用。宏跑的时候如果 SolidWorks 里已经打开了同名文件OpenDoc6会返回 Nothing。解决方法是跑宏前先关闭所有文档或者在宏里加swApp.CloseAllDocuments True。递归死循环。如果源目录里有快捷方式指向自身递归会无限循环。加一个深度限制超过 5 层就跳过。6. 把流水线跑顺之后凭证管理与长期维护的实际做法宏能跑通只是第一步。真正让这条流水线稳定运行的是凭证和配置的管理方式。我的做法是把所有可变参数抽到一个config.ini宏文件本身只含逻辑。这样同事拷贝宏过去只需要改自己的 ini 就能用不会把 Key 带出去。ini 文件放在用户目录下不进版本库。如果你需要长期跑批量任务建议把宏绑定到 SolidWorks 的工具栏按钮或者用 Windows 任务计划程序定时触发。定时任务里调用sldworks.exe加宏路径参数可以实现无人值守导出。关于 TaoToken 的使用核心价值在于统一。你不需要为每个脚本单独维护一套凭证一个 Key 覆盖多个调用场景。控制台里可以随时轮换 Key轮换后只需要更新 ini 文件宏代码不用动。接入文档里有完整的参数说明遇到不确定的字段先去查文档比猜要快。最后给一个实用建议每次批量导出前先拿一个零件做单文件测试确认三种格式都能正常生成再跑全量。这样能把问题定位在单个文件上而不是几十个文件跑完才发现全挂了。日志文件按日期命名保留最近 30 天出问题能回溯。流水线这东西跑通一次不难难的是每次都能跑通。把配置和凭证管好把校验步骤固定下来它才真正省时间。
返回列表