win32com.client清除EXCEL文件打开密码问题
前期开发使用低版OFFICE,使用win32com.client调用EXCEL应用程序,采用SaveAs方法清空文件打开密码,均正常。
升级OFFICE后,使用SaveAs方法可修改密码,但将密码设置为空时,无法清空密码。代码如下:
def remove_xlsx_password(filename, pw_str):
xcl = win32com.client.Dispatch("Excel.Application")
xcl.Visible = 0 # 应用程序不显示
try:
wb = xcl.Workbooks.Open(filename, UpdateLinks=False, ReadOnly=False, Format=None, Password=pw_str)
except:
print("ERROR: Remove .xlsx file password [%s]" % (filename))
else:
xcl.DisplayAlerts = False # 提示信息不显示
if wb != None:
wb.SaveAs(filename, None, Password='', WriteResPassword='')
finally:
xcl.Quit()
后使用Password属性解决问题,代码如下:
def remove_xlsx_password(filename, pw_str):
xcl = win32com.client.Dispatch("Excel.Application")
xcl.Visible = 0 # 应用程序不显示
try:
wb = xcl.Workbooks.Open(filename, UpdateLinks=False, ReadOnly=False, Format=None, Password=pw_str)
except:
print("ERROR: Remove .xlsx file password [%s]" % (filename))
else:
xcl.DisplayAlerts = False # 提示信息不显示
if wb != None:
wb.Password = '' # 设置工作簿密码为空
wb.Save()
wb.Close()
# wb.SaveAs(filename, None, Password='', WriteResPassword='')
# 以上语句对于低版Office可适用,但对于高版Office会出现文件打开密码可修改,但无法清空的情况。
finally:
xcl.Quit()