我需要这个命令来从python解除一个Excel文件的保护

我们从客户端获得一个Excel文件,该客户端具有开放式保护功​​能并启用了写保留保护function。 我想删除保护,所以我可以用python xlrd模块打开Excel文件。 我已经安装了pywin32包来通过COM访问Excel文件,我可以用我的程序打开它,提供两个密码,保存并closures文件没有错误。 我正在使用MSDNnetworking中描述的解除保护命令,他们没有失败,但他们也没有删除保护。 我的程序完成后,保存的文件仍然需要两个密码来打开它。 以下是我到目前为止:

import os, sys impdir = "\\\\xxx.x.xx.x\\allshare\\IT\\NewBusiness\\Python_Dev\\import\\" sys.path.append(impdir) from UsefulFunctions import * import win32com.client wkgdir = pjoin(nbShare, 'NorthLake\\_testing') filename = getFilename(wkgdir, '*Collections*.xls*') xcl = win32com.client.Dispatch('Excel.Application') xcl.visible = True pw_str = raw_input("Enter password: ") try: wb = xcl.workbooks.open(filename, 0, False, None, pw_str, pw_str) except Exception as e: print "Error:", str(e) sys.exit() wb.Unprotect(pw_str) wb.UnprotectSharing(pw_str) wb.Save() xcl.Quit() 

任何人都可以提供正确的语法解除保护命令,将工作?

这篇文章帮了我很多。 我想我会张贴我的解决scheme,以防万一它可以帮助别人。 只需取消保护,DisaplyAlerts = False,然后保存。 对我来说很容易,文件被一个可用的不受保护的文件覆盖。

 import os, sys import win32com.client def unprotect_xlsx(filename): xcl = win32com.client.Dispatch('Excel.Application') pw_str = '12345' wb = xcl.workbooks.open(filename) wb.Unprotect(pw_str) wb.UnprotectSharing(pw_str) xcl.DisplayAlerts = False wb.Save() xcl.Quit() if __name__ == '__main__': filename = 'test.xlsx' unprotect_xlsx(filename) 

@Tim Williams的build议工作。 (使用SaveAs并传递Password和WriteResPassword参数的空string。)在文件名之后,我使用'None'作为'format'参数,我使用了一个新的文件名来防止Excel提示我询问是否覆盖现有的文件。 我还发现,我不需要使用这种方法的wb.Unprotect和wb.UnprotectSharing调用。

这个function适用于我

 def Remove_password_xlsx(filename, pw_str): xcl = win32com.client.Dispatch("Excel.Application") wb = xcl.Workbooks.Open(filename, False, False, None, pw_str) xcl.DisplayAlerts = False wb.SaveAs(filename, None, '', '') xcl.Quit()