使用 WIN32COM 和 Python 取消保护 DOC 和 DOCX

问题描述 投票:0回答:1

我正在尝试使用 win32com 取消保护 Word 文档文件,但下面的代码运行时没有错误,并且没有取消保护。

我在这里做了一些搜索,并尝试了此代码的一些变体,但没有成功。

我的Word文档测试是使用protection_type = 2创建的,下面的代码可以识别,我只需要一种方法来使用此代码或其他免费代码取消保护。

感谢任何帮助!

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

我尝试使用 import Comtypes 进行一些变体,但没有成功 我也尝试使用聊天 gpt,但有一些变化,但没有成功

python ms-word docx win32com doc
1个回答
0
投票

您至少需要使用密码参数来调用Unprotect,即

改变

    doc.Unprotect
    doc.Save()

    doc.Unprotect(pPassword)
    doc.Save()
© www.soinside.com 2019 - 2024. All rights reserved.