https://help.solidworks.com/2023/english/api/swconst/filesaveasstepoptions.htm
privatevoidImportSelectedStepBatchSldprt(){try{StartCancelableCommand();if(swApp==null){Debug.WriteLine("SolidWorks 未初始化");return;}string[]selectedPaths;using(vardlg=newOpenFileDialog()){dlg.Title="选择要导入为 SLDPRT 的 STEP 文件";dlg.Filter="STEP 文件 (*.step;*.stp)|*.step;*.stp|所有文件 (*.*)|*.*";dlg.Multiselect=true;dlg.CheckFileExists=true;if(dlg.ShowDialog()!=DialogResult.OK){return;}selectedPaths=dlg.FileNames;}string[]stepPaths=selectedPaths.Where(p=>!string.IsNullOrWhiteSpace(p)&&step2one.IsStepFilePath(p)&&File.Exists(p)).Select(Path.GetFullPath).Distinct(StringComparer.OrdinalIgnoreCase).ToArray();if(stepPaths.Length==0){swApp.SendMsgToUser("未选择有效的 STEP 文件(.step / .stp)。");return;}intexported=0;intfailed=0;boolprevCommandInProgress=swApp.CommandInProgress;swApp.CommandInProgress=true;try{foreach(stringstepPathinstepPaths){CommandCancelManager.ThrowIfCancellationRequested();intrc=step2one.RunFromStepPath(swApp,stepPath);if(rc>0){exported++;}else{failed++;}}}finally{swApp.CommandInProgress=prevCommandInProgress;}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 批量导入命令一致)。/// </summary>publicstaticstring?GetSldprtOutputPathInSldprtSubfolder(string?stepFullPath){if(string.IsNullOrWhiteSpace(stepFullPath)||!IsStepFilePath(stepFullPath)){returnnull;}stringfullPath=stepFullPath.Trim();string?currentDirectory=Path.GetDirectoryName(fullPath);if(string.IsNullOrWhiteSpace(currentDirectory)){returnnull;}stringpartname=Path.GetFileNameWithoutExtension(fullPath);returnPath.Combine(currentDirectory,"sldprt",$"{partname}.sldprt");}/// <summary>/// 打开 STEP 并另存为所在目录下「sldprt」子文件夹内的 SLDPRT。/// </summary>publicstaticintRunFromStepPath(SldWorksswApp,stringstepFullPath){if(swApp==null){Console.WriteLine("错误:SolidWorks 未初始化。");return0;}string?outputPath=GetSldprtOutputPathInSldprtSubfolder(stepFullPath);if(string.IsNullOrWhiteSpace(outputPath)){Console.WriteLine("错误:无法解析 SLDPRT 输出路径。");return0;}string?outputDirectory=Path.GetDirectoryName(outputPath);if(string.IsNullOrWhiteSpace(outputDirectory)){Console.WriteLine("错误:无法解析 SLDPRT 输出目录。");return0;}if(!Directory.Exists(outputDirectory)){Directory.CreateDirectory(outputDirectory);}stringstepPath=Path.GetFullPath(stepFullPath);if(!File.Exists(stepPath)){Console.WriteLine($"错误:STEP 文件不存在:{stepPath}");return0;}ModelDoc2?partDoc=swApp.GetOpenDocumentByName(stepPath)asModelDoc2;boolopenedHere=false;if(partDoc==null){if(!TryOpenStepFile(swApp,stepPath,outpartDoc,outstring?openError)){Console.WriteLine($"错误:无法打开 STEP 文件:{stepPath}({openError})");return0;}openedHere=true;}if(!TrySaveImportedDocAsSldprt(partDoc,outputPath,outstring?saveError,outintsaveCode)){Console.WriteLine($"错误:STEP 已打开但另存 SLDPRT 失败:{outputPath}({saveError},code={saveCode})");if(openedHere){stringcloseHintPath=partDoc.GetPathName()?.Trim();if(string.IsNullOrEmpty(closeHintPath)){closeHintPath=stepPath;}fast_document_close.CloseWithoutSave(swApp,partDoc,closeHintPath);}return0;}Console.WriteLine($"{saveCode},已导出 SLDPRT 文件到:{outputPath}");if(openedHere){stringcloseHintPath=partDoc.GetPathName()?.Trim();if(string.IsNullOrEmpty(closeHintPath)){closeHintPath=outputPath;}fast_document_close.CloseWithoutSave(swApp,partDoc,closeHintPath);}return1;}privatestaticboolTryOpenStepFile(SldWorksswApp,stringstepFullPath,outModelDoc2?partDoc,outstring?errorMessage){partDoc=null;errorMessage=null;boolhad3DInterconnectPref=TryGet3DInterconnectEnabled(swApp,outboolprev3DInterconnect);if(had3DInterconnectPref){TrySet3DInterconnectEnabled(swApp,false);}try{// 官方示例:GetImportFileData 须传入 STEP 完整路径,而非 "step" 字符串。try{object?importData=swApp.GetImportFileData(stepFullPath);if(importDataisImportStepDatastepImportData){stepImportData.MapConfigurationData=true;intloadErrors=0;partDoc=swApp.LoadFile4(stepFullPath,"r",stepImportData,refloadErrors)asModelDoc2;if(partDoc!=null){returntrue;}errorMessage=$"LoadFile4 失败,errors={loadErrors}";Debug.WriteLine($"LoadFile4 STEP 失败:{stepFullPath}, errors={loadErrors}");}elseif(importData!=null){intloadErrors=0;partDoc=swApp.LoadFile4(stepFullPath,"r",importData,refloadErrors)asModelDoc2;if(partDoc!=null){returntrue;}errorMessage=$"LoadFile4 失败(非 ImportStepData),errors={loadErrors}";}else{errorMessage="GetImportFileData 返回空";}}catch(Exceptionex){errorMessage=$"LoadFile4 异常:{ex.Message}";Debug.WriteLine($"LoadFile4 STEP 异常:{stepFullPath},{ex.Message}");}intopenErrors=0;intopenWarnings=0;partDoc=swApp.OpenDoc6(stepFullPath,(int)swDocumentTypes_e.swDocPART,(int)swOpenDocOptions_e.swOpenDocOptions_Silent,"",refopenErrors,refopenWarnings)asModelDoc2;if(partDoc!=null){errorMessage=null;returntrue;}stringfallback=$"OpenDoc6 失败,errors={openErrors}, warnings={openWarnings}";errorMessage=string.IsNullOrEmpty(errorMessage)?fallback:$"{errorMessage};{fallback}";returnfalse;}finally{if(had3DInterconnectPref){TrySet3DInterconnectEnabled(swApp,prev3DInterconnect);}}}privatestaticboolTrySaveImportedDocAsSldprt(ModelDoc2partDoc,stringoutputPath,outstring?errorMessage,outintsaveCode){errorMessage=null;saveCode=0;TryBreak3DInterconnectLinks(partDoc);intsaveErrors=0;intsaveWarnings=0;boolsaveOk=partDoc.Extension.SaveAs(outputPath,(int)swSaveAsVersion_e.swSaveAsCurrentVersion,(int)swSaveAsOptions_e.swSaveAsOptions_Silent,null,refsaveErrors,refsaveWarnings);saveCode=saveErrors;if(saveOk&&saveErrors==0&&File.Exists(outputPath)){returntrue;}if(File.Exists(outputPath)){returntrue;}saveCode=partDoc.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?feat=doc.FirstFeature()asFeature;while(feat!=null){try{if(feat.Is3DInterconnectFeature){feat.BreakLink(false,false);}}catch(Exceptionex){Debug.WriteLine($"BreakLink 失败:{feat.Name},{ex.Message}");}feat=feat.GetNextFeature()asFeature;}}privatestaticboolTryGet3DInterconnectEnabled(SldWorksswApp,outboolenabled){enabled=false;try{enabled=swApp.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;}stringext=Path.GetExtension(path);returnext.Equals(".step",StringComparison.OrdinalIgnoreCase)||ext.Equals(".stp",StringComparison.OrdinalIgnoreCase);}}