如何将已经运行的进程(如Excel)分配给Python对象(PyWin32)以关闭它

如何将已经运行的进程(如Excel)分配给Python对象(PyWin32)以关闭它,python,excel,pywin32,Python,Excel,Pywin32,所以我想做的是: 打开Excel工作簿并在单元格中输入一些值 使用Pandas读取Excel文件,将其转换为数据帧 在数据帧上执行一些操作 关闭工作簿(我想自动执行此步骤,但在Excel文件仍处于打开状态时无法写入输出) 将结果输出到同一工作簿的其他工作表中 重新打开Excel工作簿以检查结果 具体来说,第4步是我遇到一些问题的地方,我必须关闭Excel,否则会出现错误(PermissionError:[Errno 13])。我知道如何使用PyWin32打开Excel应用程序并执行任何操作,但是

所以我想做的是:

  • 打开Excel工作簿并在单元格中输入一些值
  • 使用Pandas读取Excel文件,将其转换为数据帧
  • 在数据帧上执行一些操作
  • 关闭工作簿(我想自动执行此步骤,但在Excel文件仍处于打开状态时无法写入输出)
  • 将结果输出到同一工作簿的其他工作表中
  • 重新打开Excel工作簿以检查结果
  • 具体来说,第4步是我遇到一些问题的地方,我必须关闭Excel,否则会出现错误(PermissionError:[Errno 13])。我知道如何使用PyWin32打开Excel应用程序并执行任何操作,但是否有方法将已打开的Excel工作簿(以前从文件资源管理器打开)分配给PyWin32对象?

    您可以使用该库

    您必须在调用树中搜索正在运行的进程并将其杀死

    导入操作系统
    输入信号
    导入psutil
    def kill_proc_树(pid,sig=signal.SIGTERM,include_parent=True,
    超时=无,on_终止=无):
    “”“使用信号杀死进程树(包括子进程)
    “sig”并返回一个(不见了,还活着)元组。
    “on_terminate”(如果指定)是一个callabck函数,它是
    孩子一结束就给他打电话。
    """
    断言pid!=os.getpid(),“不会自杀”
    父进程=psutil.Process(pid)
    children=parent.children(递归=True)
    如果包括家长:
    附加(父级)
    对于儿童的p:
    p、 发送信号(sig)
    消失,活动=psutil.wait\u程序(子项,超时=超时,
    callback=on_终止)
    返回(消失,活着)
    

    请参阅。

    对不起,我想我找到了解决我想要的问题的方法,但我想我可能一开始就在这里描述了我的问题。基本上,我只是想要一个代码来关闭一个已经打开的Excel应用程序(也许应该这样说,而不是工作簿),并将一些结果写入其中,然后重新打开它

    import os, sys
    import tempfile
    import win32com.client
    
    from pathlib import Path
    filename = Path.cwd() / "ExcelFile.xlsx"
    
    # Obtains the opened Excel instance
    wb1 = win32com.client.GetObject(str(filename))
    
    # Closes Excel
    wb1.Application.Quit()
    
    # Do whatever here like writing output in that Excel Workbook
    
    # Reopen that Excel file
    os.startfile(filename)
    

    被发现是有用的。再次为误导性的描述表示歉意。

    请显示相关代码以及您迄今为止的尝试。