通过VBS+覆盖excel文件;python
我有一个函数,它应该创建一个VBScript并保存(覆盖)Excel文件,在修改时使用密码在该脚本中指定 职能:通过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_
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保护该文件的正确方法。有一些方法可以保护工作表或单元格,但无法保护整个文件不被密码修改。