アプリケーション レベルのアドインを使用して、リビジョン (追跡された変更) を非表示ではなくインラインでレンダリングする必要がRange
あるドキュメントを開くときにいくつかの操作を実行しています。ドキュメントを参照した後、私がしなければならないことは、アクティブ ウィンドウのビュー プロパティMarkupMode
を変更することだけだと思いました。
しかし、このプロパティは、ドキュメントでのリビジョンの表示方法とは完全に切り離されているようです! これをテストするために、ドキュメントで手動でモードを切り替え、 を見てMarkupMode
、その後すぐにonSelectionChange
イベント ハンドラーで確認してみました。私は先に進み、かなりの量の のプロパティを追跡しましたActiveWindow.View
。インラインでレンダリングされた変更を含むローカルを見たとき、驚きと悔しさに、
...そして、値を変更が非表示になっている値と比較しました。
何も変わっていません!何を与える?変更がインラインでレンダリングされることを確認するために、適切なプロパティを見ていませんか? Microsoft は意味のあるドキュメントを書くことがまったくできないのでしょうか? リビジョンのレンダリングが変更されるかどうかを確認するために、コードでもプロパティを変更しようとしたことを指摘しておきますが、成功しませんでした。フィードバックをいただければ幸いです。
編集:問題を複製する簡単なコード:
private void ThisAddIn_Startup(object sender, EventArgs e)
{
Application.WindowSelectionChange += application_WindowSelectionChange;
}
private void application_WindowSelectionChange(Selection sel)
{
var testDoc = sel.Document;
var test = new
{
testDoc.ActiveWindow.View,
testDoc.ActiveWindow.View.ShowRevisionsAndComments,
testDoc.ActiveWindow.View.ShowInsertionsAndDeletions,
testDoc.ActiveWindow.View.MarkupMode,
testDoc.ActiveWindow.View.RevisionsMode
};
}
編集 2:DocumentOpen
この不自然な例を超えて、オブジェクトとして存在するテキストを含む可能性のあるテキストを検索しているため、リビジョンのマークアップ スタイルを制御する必要がありRevision
ます。より具体的には、上記のテキストを使用して、次のことを試みています(テキスト「証明するのに役立つ強力な方法」はリビジョンで削除されています)。
private void ThisAddIn_Startup(object sender, EventArgs e)
{
Application.DocumentOpen += application_DocumentOpen;
}
private void application_DocumentOpen(Document doc)
{
// expected text, as taken from screengrab example above. Includes
// text removed in a revision
string expectedText = "Video provides a powerful way to help you prove your point.";
// make sure that we're in print view
if (doc.ActiveWindow.View.Type != WdViewType.wdPrintView)
{
doc.ActiveWindow.View.Type = WdViewType.wdPrintView;
}
// attempt to ensure that document revisions are marked up inline. Does not accomplish anything
doc.ActiveWindow.View.MarkupMode = WdRevisionsMode.wdInLineRevisions;
// attempt to locate text. Will fail if revisions are not marked up inline (deletion is not part of document content range otherwise)
var locatedRange = doc.Content.OccurrenceOfText(expectedText);
}
// extension method to locate text inside a range. Searching entire Content in this example
private static Range OccurrenceOfText(this Range rng, string text)
{
rng.Find.Forward = true;
rng.Find.Format = false;
rng.Find.Execute(text);
if (!rng.Find.Found)
{
throw new Exception("Unable to locate text! Are Revisions marked up inline?");
}
// return brand new range containing located content
return rng.Document.Range(rng.Start, rng.End);
}
編集 3: Cindy が明らかにしたように、私の問題は、間違ったプロパティを使用していView.RevisionsFilter.Markup
たことです。プロパティを使用して変更を加える必要がありました。さらに、私が診断していなかった問題は、View プロパティによっては、Range
実行した検索から返された が、検索されText
たテキストとは異なるプロパティを返す可能性が十分にあるということです。これはRevision
、 内にオブジェクトが存在する場合に発生する可能性がありRange
ます。