前期開發使用低版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()
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/14946.html
上一篇:python selenium webdriver 關于如何呼叫已打開的firefox,而不需要每次運行一次程式就打開一個新的firefox
