我正在努力处理 Word API 中的 Range 对象,尤其是结合跟踪更改。
我构建了一个解决方案,一个用户可以在 Word 文档中选择文本。我使用数据库来存储这些选定单词/句子的开始和结束位置。当用户打开文档时,这些词将被突出显示。但是,如果我们开始跟踪更改,这些范围将不再映射到文档中的正确位置。我真的找不到进行此映射的方法,非常感谢您的帮助。有没有办法做到这一点?
我已经尝试了很多东西:
_wordDocument.ShowRevisions = false;
_wordDocument.TrackRevisions = false;
_wordDocument.TrackFormatting = false;
_wordDocument.TrackMoves = false;
_wordDocument.ActiveWindow.View.RevisionsView = WdRevisionsView.wdRevisionsViewOriginal;
_wordDocument.ActiveWindow.View.ShowRevisionsAndComments = false;
_wordDocument.ActiveWindow.View.ShowInsertionsAndDeletions = false;
_wordDocument.Saved = false;
_wordDocument.Save();
//Do what we need to do
range = _wordDocument.Range(ref startRange, ref endRange);
string theTextInRange = range.Text;
MessageBox.Show("Text in range: " + theTextInRange);
_wordDocument.Bookmarks.Add(string.Format(CultureInfo.InvariantCulture, "_{0}", commentViewModel.CommentId), range);
//Revert back (do after)
_wordDocument.ShowRevisions = _lastShowRevisions;
_wordDocument.TrackRevisions = true;
_wordDocument.TrackFormatting = _lastTrackFormatting;
_wordDocument.TrackMoves = true;
_wordDocument.ActiveWindow.View.RevisionsView = WdRevisionsView.wdRevisionsViewFinal;
_wordDocument.ActiveWindow.View.ShowRevisionsAndComments = true;
_wordDocument.ActiveWindow.View.ShowInsertionsAndDeletions = true;
_wordDocument.Saved = false;
_wordDocument.Save();
如您所见,下次打开文档时,我使用书签来硬存储评论的位置,但是如果用户同时更改了文档,则该范围不再映射(我的实现支持多个副本,所以这意味着用户 B 可以突出显示复制版本中的内容,并且这些突出显示也显示在文档 B 中,我们尝试在上面的代码中创建书签)。