打开 solidworks当前文件 所在的文件夹 python pywin32
·
打开 solidworks当前文件 所在的文件夹 python pywin32
import os
import subprocess
import win32com.client
import pythoncom
from sw_server import get_sw_app, get_swmodel
def open_current_sw_document_folder():
"""
打开当前SolidWorks活动文档所在的文件夹
"""
try:
# 获取SolidWorks应用程序实例
sw_app = get_sw_app()
if not sw_app:
print("❌ 请先启动 SolidWorks")
return False
# 获取当前活动文档
active_doc = sw_app.ActiveDoc
if active_doc is None:
print("⚠️ 当前没有打开的文档")
return False
# 获取文档的完整路径
doc_path = active_doc.GetPathName
if not doc_path or doc_path == "":
print("⚠️ 当前文档未保存,无法确定文件位置")
return False
# 检查文件是否存在
if not os.path.exists(doc_path):
print(f"⚠️ 文件不存在: {doc_path}")
return False
# 打开文件所在的文件夹并选中该文件
subprocess.run(['explorer', '/select,', doc_path], check=True)
print(f"✅ 已在资源管理器中打开文件夹并选中文件: {os.path.basename(doc_path)}")
return True
except subprocess.CalledProcessError as e:
print(f"❌ 无法打开文件夹: {e}")
return False
except Exception as e:
print(f"❌ 操作失败: {e}")
return False
def open_sw_part_folder(part_name, base_path=r"solidworksdata\一体式油水分离器"):
"""
打开指定SolidWorks零件文件所在的文件夹
:param part_name: 零件名称(不包含扩展名)
:param base_path: 基础路径
"""
try:
# 构建零件文件完整路径
part_name = part_name.strip()
part_file = f"{part_name}.sldprt"
full_path = os.path.join(base_path, part_file)
full_path = os.path.abspath(full_path)
# 检查文件是否存在
if not os.path.exists(full_path):
print(f"⚠️ 零件文件不存在: {full_path}")
return False
# 打开文件夹并选中该文件
subprocess.run(['explorer', '/select,', full_path], check=True)
print(f"✅ 已在资源管理器中打开零件文件夹并选中: {part_file}")
return True
except subprocess.CalledProcessError as e:
print(f"❌ 无法打开文件夹: {e}")
return False
except Exception as e:
print(f"❌ 操作失败: {e}")
return False
# 使用示例(可选添加到 __main__ 部分)
if __name__ == "__main__":
# 打开当前SolidWorks文档所在的文件夹
open_current_sw_document_folder()
import win32com.client
import pythoncom
arg_Nothing = win32com.client.VARIANT(pythoncom.VT_DISPATCH, None)
def get_solidworks_instance():
"""
尝试连接到一个已经运行的SolidWorks实例,
如果没有找到,则启动一个新的实例。
"""
try:
# 尝试连接到现有的SolidWorks应用程序
swApp = win32com.client.Dispatch("SldWorks.Application")
except pythoncom.com_error:
print("未找到正在运行的SolidWorks实例,正在启动新实例...")
# 如果没有找到,则创建一个新的实例
swApp = win32com.client.gencache.EnsureDispatch("SldWorks.Application")
return swApp
# 获取SolidWorks应用程序对象
swApp = get_solidworks_instance()
# 激活SolidWorks窗口(可选)
swApp.Visible = True
# 检查是否有已打开的文档,如果没有,则创建新零件文档
if swApp.ActiveDoc is None:
# 路径需要根据你的SolidWorks安装版本和模板位置调整
part = swApp.NewDocument(r"C:\ProgramData\SOLIDWORKS\SOLIDWORKS 2025\templates", 0, 0, 0)
else:
print("已有文档处于打开状态,使用现有文档进行操作或关闭当前文档后重试。")
# 接下来的代码可以继续按照之前的逻辑来创建立方体...
swModel = swApp.ActiveDoc
# 创建草图并绘制矩形
import win32com.client
import pythoncom
def get_sw_app():
"""获取或启动 SolidWorks 实例"""
try:
swApp = win32com.client.GetActiveObject("SldWorks.Application")
print("连接到已运行的 SolidWorks。")
except:
print("未检测到 SolidWorks,正在启动...")
swApp = win32com.client.Dispatch("SldWorks.Application")
swApp.Visible = True
return swApp
def get_swmodel():
# 获取 SolidWorks 实例
swApp = get_sw_app()
# 创建新零件(如果无活动文档)
if swApp.ActiveDoc is None:
# 使用默认零件模板(路径可能因版本而异)
# 建议使用空模板或确保路径正确
# 获取默认零件模板
swModel = swApp.NewDocument(r"C:\ProgramData\SOLIDWORKS\SOLIDWORKS 2025\templates\gb_part.prtdot", 0, 0, 0)
else:
swModel = swApp.ActiveDoc
# 强制类型转换为 PartDoc
swPart = swModel
return swPart, swModel
更多推荐

所有评论(0)