通过VBS+覆盖excel文件;python

通过VBS+覆盖excel文件;python,python,excel,vbscript,Python,Excel,Vbscript,我有一个函数,它应该创建一个VBScript并保存(覆盖)Excel文件,在修改时使用密码在该脚本中指定 职能: def setPassword(self, excel_file_path, password): """Locks excel file with password. Modification allowed only when password is entered""" excel_file_

我有一个函数,它应该创建一个VBScript并保存(覆盖)Excel文件,在修改时使用密码在该脚本中指定

职能:

    def setPassword(self, excel_file_path, password):
    """Locks excel file with password. Modification allowed only when password is entered"""

    excel_file_path = Path(excel_file_path)

    vbs_script = \
    f"""' Save with password required upon opening

    Set excel_object = CreateObject("Excel.Application")
    Set workbook = excel_object.Workbooks.Open(FileName:="{excel_file_path}", ReadOnly:=False, Notify:=False)

    excel_object.DisplayAlerts = False
    excel_object.Visible = False

    workbook.SaveAs "{excel_file_path}",,, "{password}"

    excel_object.Application.Quit
    """

    # write
    vbs_script_path = excel_file_path.parent.joinpath("set_password.vbs")
    with open(vbs_script_path, "w") as file:
        file.write(vbs_script)

    # execute
    result = subprocess.Popen(['cscript.exe', str(vbs_script_path)], creationflags=subprocess.CREATE_NO_WINDOW, stdout=subprocess.PIPE, stderr=subprocess.PIPE)

 
    output, err = result.communicate()
    res = {
        "result": output.decode(encoding='cp866'),
        "err": self._errMessage(err.decode(encoding='cp866'))
    }

    # remove
    vbs_script_path.unlink()

    return res
问题是,在我的电脑上,它做得很正确。但是,如果我在我的工作PC上运行它,VBS会抛出一个异常,即在尝试保存文件时无法访问该文件

如果我使用不同的名称来保存带有密码的文件,它就可以正常工作。 当然,我可以用其他名称保存文件,删除初始文件,然后重命名新文件。但这是一个鸭子磁带,我想要一个好的解决方案

PS 我看到的信息是,不可能以这种方式覆盖该文件。但既然它在一台计算机上工作,我想应该有办法让它在另一台计算机上工作

PPS 将此
XlSaveConflictResolution
参数插入save func也没有帮助


此VBS有什么问题,以及如何使其正常工作?

通过以新名称保存文件,然后删除初始文件并使用初始名称重命名新文件来解决此问题。 例如,我有一个名为foo.xlsx的文件。我运行脚本并将处理后的文件保存为foe.xlsx。然后我用os删除foo.xlsx。
os.unlink()
。最后,我使用
os.rename()


希望有一天这对某人有所帮助

既然您似乎不喜欢ducttape,为什么不能从Python访问excel API?对我来说,创建一个.vbs文件来执行部分逻辑似乎是一个非常好的解决方案。我未能找到一种从excel api保护该文件的正确方法。有一些方法可以保护工作表或单元格,但无法保护整个文件不被密码修改。