不知何故,我保存的 Word 文档变成了 .txt 文件(即使我不小心将其保存为 .txt,难道不应该创建副本而不删除原始文件吗?),这意味着其所有跟踪的更改都消失了,并且所有注释都转换为文档末尾的列表。我怀疑我可以使用“比较文档”恢复跟踪,但有没有办法逆转此过程,使注释列表自动转换回注释,而不必手动重写每个注释?
答案1
如果错误地保存了 Word 文档,将其转换为末尾带有注释列表的文本文件,则可以使用软件包 python-docx 和 bayoo-docx 轻松恢复注释,这两个软件包允许使用 Python 以编程方式操作 .docx 文件。后一个软件包可能是操作注释所必需的。这不会恢复格式或丢失的更改,尽管如果有未修改的文档副本,可以使用 Word 的比较工具恢复后者。
以下简单程序可以完成恢复注释的任务。它需要两个文件:一个包含文档文本和末尾的注释列表的 .txt 文件(该文件应该是由于错误保存 Word 文档而生成的文件),以及一个仅包含文本而不包含注释的文件。此文件可以轻松手动(或通过编程)创建。有关代码工作原理的详细说明,请参阅代码注释。
# -*- coding: utf-8 -*-
from docx import Document
import re
#Open the text file with the comments at the end
a = []
with open("TEXT_DOCUMENT.txt") as f:
for lines in f:
if re.search("AUTHOR_INITIALS", lines):
#Remove the initial comment marker, of the form [AUTHOR_INITIALS NUMBER]
lines = re.sub(r'\[AUTHOR_INITIALS.+\]', '', lines) #Replace AUTHOR_INITIALS with the actual initials included in the file.
#Then add them to an array.
a.append(lines)
#Assuming that the author's name does not appear in the text itself, approximately the first half of occurrences of the author's name will be the locations of the comments,
#not the comment text itself, so we exclude them.
a = a[int(len(a)/2-2):]
#Open a document consisting of the contents of the text file with the comments removed. This is easily done manually.
document = Document("FILE_WITHOUT_COMMENTS.docx")
i = 0
for para in document.paragraphs:
#Find the location of the comment markers in the body of the text, excluding any portion of the comment list that might accidentally have been included.
if "AUTHOR_INITIALS" in para.text and i<=len(a):
#As before, strip the comment marker.
new_para = re.sub(r'\[AUTHOR_INITIALS.+\]', '', para.text)
para.text = new_para
para.add_comment(str(a[i]), author = 'AUTHOR', initials = 'AUTHOR_INITIALS')
i = i + 1
document.save("OUTPUT_FILE.docx)
该代码是为 Python 3.7 编写的,可与 Microsoft Word 版本 2107、python-docx 版本 0.2.17 和 re 版本 2.2.1 一起使用。