J'ai besoin de la command pour déprotéger un file Excel de Python

Nous obtenons un file Excel à partir d'un client qui a une protection ouverte et une protection de réserve d'écriture activée. Je souhaite supprimer la protection afin d'ouvrir le file Excel avec le module python xlrd. J'ai installé le package pywin32 pour accéder au file Excel via COM, et je peux l'ouvrir avec mon programme fournissant les deux passwords, sauvegarder et fermer le file sans erreur. J'utilise les commands Unprotect comme décrit dans le réseau MSDN, et elles ne sont pas en panne, mais elles ne suppriment pas non plus la protection. Le file enregistré requirejs encore deux passwords pour l'ouvrir après la fin de mon programme. Voici ce que j'ai jusqu'ici:

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() 

Quelqu'un peut-il me fournir la syntaxe correcte pour les commands non protégées qui fonctionneront?

La suggestion de @Tim Williams a fonctionné. (Utilisez SaveAs et passez des strings vides pour les parameters Password et WriteResPassword.) J'ai utilisé 'None' pour le paramètre 'format' après le nom du file, et j'ai utilisé un nouveau nom de file pour que Excel m'invite à requestr si OK pour replace le file existant. J'ai également constaté que je n'avais pas besoin des appels wb.Unprotect et wb.UnprotectSharing utilisant cette approche.

Cette publication m'a beaucoup aidé. Je pensais que je publierais ce que j'avais utilisé pour ma solution au cas où cela pourrait aider quelqu'un d'autre. Just Unprotect, DisaplyAlerts = False et Save. Je l'ai simplifié et le file est écrasé avec un file non protégé utilisable.

 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) 

Cette fonction fonctionne pour moi

 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()