https://help.solidworks.com/2023/english/api/swconst/filesaveasstepoptions.htmprivatevoidImportSelectedStepBatchSldprt(){try{StartCancelableCommand();if(swAppnull){Debug.WriteLine(SolidWorks 未初始化);return;}string[]selectedPaths;using(vardlgnewOpenFileDialog()){dlg.Title选择要导入为 SLDPRT 的 STEP 文件;dlg.FilterSTEP 文件 (*.step;*.stp)|*.step;*.stp|所有文件 (*.*)|*.*;dlg.Multiselecttrue;dlg.CheckFileExiststrue;if(dlg.ShowDialog()!DialogResult.OK){return;}selectedPathsdlg.FileNames;}string[]stepPathsselectedPaths.Where(p!string.IsNullOrWhiteSpace(p)step2one.IsStepFilePath(p)File.Exists(p)).Select(Path.GetFullPath).Distinct(StringComparer.OrdinalIgnoreCase).ToArray();if(stepPaths.Length0){swApp.SendMsgToUser(未选择有效的 STEP 文件.step / .stp。);return;}intexported0;intfailed0;boolprevCommandInProgressswApp.CommandInProgress;swApp.CommandInProgresstrue;try{foreach(stringstepPathinstepPaths){CommandCancelManager.ThrowIfCancellationRequested();intrcstep2one.RunFromStepPath(swApp,stepPath);if(rc0){exported;}else{failed;}}}finally{swApp.CommandInProgressprevCommandInProgress;}stringmsg$SLDPRT 导入完成成功{exported}个失败{failed}个。;swApp.SendMsgToUser(msg);Debug.WriteLine(msg);}catch(OperationCanceledException){swApp?.SendMsgToUser(命令已中止);}catch(Exceptionex){Debug.WriteLine($所选 STEP 批量导入 SLDPRT 失败{ex.Message});swApp?.SendMsgToUser($所选 STEP 批量导入 SLDPRT 失败{ex.Message});}}namespacetools;usingSolidWorks.Interop.sldworks;usingSolidWorks.Interop.swconst;usingSystem.Diagnostics;publicstaticclassstep2one{/// summary/// STEP 所在目录下「sldprt」子文件夹内的 SLDPRT 路径与所选 STEP 批量导入命令一致。/// /summarypublicstaticstring?GetSldprtOutputPathInSldprtSubfolder(string?stepFullPath){if(string.IsNullOrWhiteSpace(stepFullPath)||!IsStepFilePath(stepFullPath)){returnnull;}stringfullPathstepFullPath.Trim();string?currentDirectoryPath.GetDirectoryName(fullPath);if(string.IsNullOrWhiteSpace(currentDirectory)){returnnull;}stringpartnamePath.GetFileNameWithoutExtension(fullPath);returnPath.Combine(currentDirectory,sldprt,${partname}.sldprt);}/// summary/// 打开 STEP 并另存为所在目录下「sldprt」子文件夹内的 SLDPRT。/// /summarypublicstaticintRunFromStepPath(SldWorksswApp,stringstepFullPath){if(swAppnull){Console.WriteLine(错误SolidWorks 未初始化。);return0;}string?outputPathGetSldprtOutputPathInSldprtSubfolder(stepFullPath);if(string.IsNullOrWhiteSpace(outputPath)){Console.WriteLine(错误无法解析 SLDPRT 输出路径。);return0;}string?outputDirectoryPath.GetDirectoryName(outputPath);if(string.IsNullOrWhiteSpace(outputDirectory)){Console.WriteLine(错误无法解析 SLDPRT 输出目录。);return0;}if(!Directory.Exists(outputDirectory)){Directory.CreateDirectory(outputDirectory);}stringstepPathPath.GetFullPath(stepFullPath);if(!File.Exists(stepPath)){Console.WriteLine($错误STEP 文件不存在{stepPath});return0;}ModelDoc2?partDocswApp.GetOpenDocumentByName(stepPath)asModelDoc2;boolopenedHerefalse;if(partDocnull){if(!TryOpenStepFile(swApp,stepPath,outpartDoc,outstring?openError)){Console.WriteLine($错误无法打开 STEP 文件{stepPath}{openError});return0;}openedHeretrue;}if(!TrySaveImportedDocAsSldprt(partDoc,outputPath,outstring?saveError,outintsaveCode)){Console.WriteLine($错误STEP 已打开但另存 SLDPRT 失败{outputPath}{saveError}code{saveCode});if(openedHere){stringcloseHintPathpartDoc.GetPathName()?.Trim();if(string.IsNullOrEmpty(closeHintPath)){closeHintPathstepPath;}fast_document_close.CloseWithoutSave(swApp,partDoc,closeHintPath);}return0;}Console.WriteLine(${saveCode}已导出 SLDPRT 文件到{outputPath});if(openedHere){stringcloseHintPathpartDoc.GetPathName()?.Trim();if(string.IsNullOrEmpty(closeHintPath)){closeHintPathoutputPath;}fast_document_close.CloseWithoutSave(swApp,partDoc,closeHintPath);}return1;}privatestaticboolTryOpenStepFile(SldWorksswApp,stringstepFullPath,outModelDoc2?partDoc,outstring?errorMessage){partDocnull;errorMessagenull;boolhad3DInterconnectPrefTryGet3DInterconnectEnabled(swApp,outboolprev3DInterconnect);if(had3DInterconnectPref){TrySet3DInterconnectEnabled(swApp,false);}try{// 官方示例GetImportFileData 须传入 STEP 完整路径而非 step 字符串。try{object?importDataswApp.GetImportFileData(stepFullPath);if(importDataisImportStepDatastepImportData){stepImportData.MapConfigurationDatatrue;intloadErrors0;partDocswApp.LoadFile4(stepFullPath,r,stepImportData,refloadErrors)asModelDoc2;if(partDoc!null){returntrue;}errorMessage$LoadFile4 失败errors{loadErrors};Debug.WriteLine($LoadFile4 STEP 失败:{stepFullPath}, errors{loadErrors});}elseif(importData!null){intloadErrors0;partDocswApp.LoadFile4(stepFullPath,r,importData,refloadErrors)asModelDoc2;if(partDoc!null){returntrue;}errorMessage$LoadFile4 失败非 ImportStepDataerrors{loadErrors};}else{errorMessageGetImportFileData 返回空;}}catch(Exceptionex){errorMessage$LoadFile4 异常:{ex.Message};Debug.WriteLine($LoadFile4 STEP 异常:{stepFullPath},{ex.Message});}intopenErrors0;intopenWarnings0;partDocswApp.OpenDoc6(stepFullPath,(int)swDocumentTypes_e.swDocPART,(int)swOpenDocOptions_e.swOpenDocOptions_Silent,,refopenErrors,refopenWarnings)asModelDoc2;if(partDoc!null){errorMessagenull;returntrue;}stringfallback$OpenDoc6 失败errors{openErrors}, warnings{openWarnings};errorMessagestring.IsNullOrEmpty(errorMessage)?fallback:${errorMessage};{fallback};returnfalse;}finally{if(had3DInterconnectPref){TrySet3DInterconnectEnabled(swApp,prev3DInterconnect);}}}privatestaticboolTrySaveImportedDocAsSldprt(ModelDoc2partDoc,stringoutputPath,outstring?errorMessage,outintsaveCode){errorMessagenull;saveCode0;TryBreak3DInterconnectLinks(partDoc);intsaveErrors0;intsaveWarnings0;boolsaveOkpartDoc.Extension.SaveAs(outputPath,(int)swSaveAsVersion_e.swSaveAsCurrentVersion,(int)swSaveAsOptions_e.swSaveAsOptions_Silent,null,refsaveErrors,refsaveWarnings);saveCodesaveErrors;if(saveOksaveErrors0File.Exists(outputPath)){returntrue;}if(File.Exists(outputPath)){returntrue;}saveCodepartDoc.SaveAs3(outputPath,0,(int)swSaveAsOptions_e.swSaveAsOptions_Silent);if(File.Exists(outputPath)){returntrue;}errorMessage$Extension.SaveAs 返回{saveOk}, errors{saveErrors}, warnings{saveWarnings}; SaveAs3{saveCode}32格式不可用多为 3D Interconnect 链接文档;returnfalse;}privatestaticvoidTryBreak3DInterconnectLinks(ModelDoc2doc){Feature?featdoc.FirstFeature()asFeature;while(feat!null){try{if(feat.Is3DInterconnectFeature){feat.BreakLink(false,false);}}catch(Exceptionex){Debug.WriteLine($BreakLink 失败:{feat.Name},{ex.Message});}featfeat.GetNextFeature()asFeature;}}privatestaticboolTryGet3DInterconnectEnabled(SldWorksswApp,outboolenabled){enabledfalse;try{enabledswApp.GetUserPreferenceToggle((int)swUserPreferenceToggle_e.swMultiCAD_Enable3DInterconnect);returntrue;}catch(Exceptionex){Debug.WriteLine($读取 3D Interconnect 首选项失败:{ex.Message});returnfalse;}}privatestaticvoidTrySet3DInterconnectEnabled(SldWorksswApp,boolenabled){try{swApp.SetUserPreferenceToggle((int)swUserPreferenceToggle_e.swMultiCAD_Enable3DInterconnect,enabled);}catch(Exceptionex){Debug.WriteLine($设置 3D Interconnect 首选项失败:{ex.Message});}}publicstaticboolIsStepFilePath(stringpath){if(string.IsNullOrWhiteSpace(path)){returnfalse;}stringextPath.GetExtension(path);returnext.Equals(.step,StringComparison.OrdinalIgnoreCase)||ext.Equals(.stp,StringComparison.OrdinalIgnoreCase);}}