-
Notifications
You must be signed in to change notification settings - Fork 1.3k
Add revision management capability + tests + docs #1534
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Conversation
positional replacement
Nice job.
Would you consider adding a property for the Paragraph object to get the final text? (similar to the different solutions proposed on #340 )
louspringer
commented
Jan 21, 2026
Hi @jfthuong and @amithkk, following up on the discussion here about reading the final text: I've opened #1538 which implements native support for w:ins in paragraph.text (resolving to the 'Accepted' view) and registers w:delText for provenance tools. It might be a useful complement to the writing capabilities here.
This PR adds comprehensive support for creating and managing tracked changes (revisions) in Word documents, enabling programmatic document editing with full revision history visible in Microsoft Word.
Tests have been added for new functionality, and existing tests have been run to ensure that backwards compatibility is maintained.
Why?
Users need to make programmatic changes to Word documents while preserving some sort of an audit trail. Solves #930 and #340
Features
Paragraph.add_run_tracked()- Add text as a tracked insertionRun.delete_tracked()- Mark existing text as a tracked deletionParagraph.replace_tracked()- Replace specific text with revision trackingDocument.find_and_replace_tracked()- Bulk find-and-replace across entire documentdocument.settings.track_revisions- Enable/disable track changes modeTrackedInsertionandTrackedDeletionproxy classes withaccept()andreject()methodsExample Usage
This is just barebones, and this capability can be extended by later additions to possibly build out a context manager (eg.
with document.track_all_changes() as doc:) to make it function similar to how "Track Changes" works in word. However there are a fair number of edge cases you'd have to deal with in that situation.Some of this work draws on the exhaustive code written in OpenXmlPowerTools WmlComparer and the underlying .NET library.