我已经为MS word创建了一个加载项。我有两个按钮。单击首先突出显示一系列单词,使我前进。在第二个按钮上,单击“我要转到上一个突出显示的单词”。任何人都可以在第二按钮功能上帮助我。在按钮上单击一次,我的代码可以正常工作。现在如何在每次单击按钮2时转到以前突出显示的单词范围?
private void adxRibbonButton1_OnClick(object sender, IRibbonControl control, bool pressed)
{
object missing = System.Type.Missing;
Word.Document document = WordApp.ActiveDocument;
foreach(Word.Range docRange in document.Words)
{
if(docRange.HighlightColorIndex.Equals(Microsoft.Office.Interop.Word.WdColorIndex.wdRed))
{
docRange.HighlightColorIndex = Microsoft.Office.Interop.Word.WdColorIndex.wdBlue;
docRange.Font.ColorIndex = Microsoft.Office.Interop.Word.WdColorIndex.wdWhite;
break;
}
}
}
答案 0 :(得分:0)
有多种方法可以解决此问题:
使用Word的内置Find
在文档中向后搜索更改的突出显示的第一个实例。
设置两个书签,一个用于问题中代码的当前位置,另一个用于前一个位置。下面的代码示例适用于此版本。
string CurrentBkm = "_bkmCurrent";
string LastBkm= "_bkmLast";
if(docRange.HighlightColorIndex.Equals(Microsoft.Office.Interop.Word.WdColorIndex.wdRed))
{
docRange.HighlightColorIndex = Microsoft.Office.Interop.Word.WdColorIndex.wdBlue;
docRange.Font.ColorIndex = Microsoft.Office.Interop.Word.WdColorIndex.wdWhite;
if (document.Bookmarks.Exists(CurrentBkm))
{
document.Bookmarks.Add(LastBkm, document.Bookmarks[CurrentBkm].Range.Duplicate);
}
document.Bookmarks.Add(CurrentBkm, docRange);
break;
button2的代码只需转到书签“ _bkmLast”:
string LastBkm= "_bkmLast";
document.Bookmarks[LastBkm].Range.Select();
请注意,书签名称以下划线_
开头。这会将书签隐藏在Word UI中,以防万一应用程序设置显示书签的非打印字符,不会激怒用户。
还要注意,问题中的代码也可以与Word的内置Find
功能一起使用,以搜索格式。这几乎肯定比“遍历”文档中的每个单词并测试其突出显示格式的效率更高。如果您要更改代码以使用Find
,则我为书签提供的解决方案仍然有效。