Search code examples
pythonms-wordpywin32win32com

Python - Using win32com.client to accept all changes in Word Documents


I'm using win32com.client from the pywin32 module to accept all tracked changes in a word document (Python 3.6.4 on Windows 10 64 bit).

Specifically the code I'm using is the following:

import win32com.client as win32


word = win32.gencache.EnsureDispatch("Word.Application")
word.Visible = False
doc = word.Documents.Open(PATH TO WORD FILE)
doc.Activate()
word.ActiveDocument.TrackRevisions = False  # Maybe not need this

try:
    word.WordBasic.AcceptAllChangesInDoc()
except TypeError:
    pass

word.ActiveDocument.Save()
doc.Close(False)
word.Application.Quit()

I have two questions.

1.) Is there a better way to accept all changes rather than using the try-except block? Using this method produces a TypeError so a try-except block is required to finish the program.

2.) Do you know how you can delete comments left from users?


Solution

  • Here is a code working with Python 2.7 (I assume it works with Python 3.6.4 as well - I'm not familiar yet with the change between 2.X and 3.X)

    #!/usr/bin/env python3
    
    import win32com.client as win32
    
    path_file_name = "YourPath\ToYour\doc.docx"
    word = win32.gencache.EnsureDispatch("Word.Application")
    word.Visible = False
    doc = word.Documents.Open(path_file_name )
    doc.Activate()
    word.ActiveDocument.TrackRevisions = False  # Maybe not need this (not really but why not)
    
    # Accept all revisions
    word.ActiveDocument.Revisions.AcceptAll()
    # Delete all comments
    if word.ActiveDocument.Comments.Count >= 1:
        word.ActiveDocument.DeleteAllComments()
    
    word.ActiveDocument.Save()
    doc.Close(False)
    word.Application.Quit()
    

    Let me know if it works out for you.