打开 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


更多推荐