我正在努力使用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中,我们尝试创建书签,就像我在上面的代码中所示。)