python excel com pywin32

Necesito el comando para desproteger un archivo de Excel de Python



pywin32 (3)

Estamos obteniendo un archivo de Excel de un cliente que tiene protección abierta y protección de escritura de reserva activada. Quiero eliminar la protección para poder abrir el archivo Excel con el módulo python xlrd. He instalado el paquete pywin32 para acceder al archivo de Excel a través de COM, y puedo abrirlo con mi programa suministrando las dos contraseñas, guardar y cerrar el archivo sin errores. Estoy usando los comandos Desproteger como se describe en la red MSDN, y no están fallando, pero tampoco eliminan la protección. El archivo guardado aún requiere dos contraseñas para abrirlo una vez que finalice mi programa. Esto es lo que tengo hasta ahora:

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

¿Alguien puede proporcionarme la sintaxis correcta para desproteger los comandos que funcionarán?


La sugerencia de @Tim Williams funcionó. (Utilice SaveAs y pase cadenas vacías para los parámetros Password y WriteResPassword). Utilicé ''None'' para el parámetro ''format'' después del nombre de archivo, y utilicé un nuevo nombre de archivo para evitar que Excel me pidiera que me preguntara si podía sobrescribir el archivo existente. También descubrí que no necesitaba las llamadas wb.Unprotect y wb.UnprotectSharing utilizando este enfoque.


Esta publicación me ayudó mucho. Pensé en publicar lo que utilicé para mi solución en caso de que pueda ayudar a otra persona. Just Unprotect, DisaplyAlerts = False y Save. Lo hice fácil para mí y el archivo se sobrescribe con un archivo no protegido utilizable.

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)


Esta función funciona para mí

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