0

I´m trying to unprotect a word document file using win32com but the code below run without error and not unprotect.

I did some searches here and I have tried some variations with this code but no success.

My word document test was created with protection_type = 2 and the code below is recognizing ok I just need a way to unprotect with this code or another free code.

Appreciate any help !

import win32com.client

def protect_file(pFileName, pPassword):
    word = win32com.client.gencache.EnsureDispatch('Word.Application')    
    
    word.Visible = False

    doc = word.Documents.Open(pFileName, PasswordDocument=pPassword)
    
    doc.Protect(Type=2, NoReset=True, Password=pPassword)
    
    doc.Save()

    doc.Close()
    
    word.Quit()


def unprotect_file(pFileName, pPassword):
    
  word_app = win32com.client.gencache.EnsureDispatch('Word.Application')
  word_app.Visible = False

  try:
    
    doc = word_app.Documents.Open(pFileName, PasswordDocument=pPassword)

    protection_type = doc.ProtectionType

    if protection_type != -1:
      
      if protection_type == 2:
        
        print(f'Protection Type : {protection_type} -> wdAllowOnlyComments' )
      
      elif protection_type == 3:
        
        print(f'Protection Type : {protection_type} -> wdAllowOnlyRevisions' )
      
      elif protection_type == 4:
                
        print(f'Protection Type : {protection_type} -> wdAllowOnlyFormFields' )
      
      doc.Unprotect
      doc.Save()
      
      print(f'Document saved !')

    else:  
        print(f'{pFileName} inst protected !')

  except Exception as e:
    
    print(f'Error : {e}')

  finally:
    if doc:
      doc.Close(SaveChanges=True)
      word_app.Quit()

I tried to use import Comtypes with some variations with no success I tried to use chat gpt too with some variations with no success

1 Answer 1

0

Ok Guys ! Here´s the code below working ! I Hope that its usefull for someone

import win32com.client

# pip install pywin32

def protect_file(pFileName, pPassword):
  word_app = win32com.client.gencache.EnsureDispatch('Word.Application')    
  
  doc = word_app.Documents.Open(pFileName, PasswordDocument=pPassword)
   
  if doc.ProtectionType == -1:
   
    doc.PrintPreview()
   
    doc.Protect(2, True, pPassword)
   
    doc.Save()


def unprotect_file(pFileName, pPassword):
  word_app = win32com.client.gencache.EnsureDispatch('Word.Application')    
  
  doc = word_app.Documents.Open(pFileName, PasswordDocument=pPassword)
   
  if doc.ProtectionType != -1:
   
    doc.PrintPreview()
   
    doc.Unprotect(pPassword) 
   
    doc.Save()

Sign up to request clarification or add additional context in comments.

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.