我正在尝试使用 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,但有一些变化,但没有成功
您至少需要使用密码参数来调用Unprotect,即
改变
doc.Unprotect
doc.Save()
到
doc.Unprotect(pPassword)
doc.Save()