找到突出显示的文本

5
下面的代码可以在Word文档中查找“Family”单词出现的次数,并对其进行选择和删除。虽然这段代码可以正常运行,但我想要查找所有被高亮显示的单词。
public void FindHighlightedText()
{
    const string filePath = "D:\\COM16_Duke Energy.doc";

    var word = new Microsoft.Office.Interop.Word.Application {Visible = true};
    var doc = word.Documents.Open(filePath);
    var range = doc.Range();

    range.Find.ClearFormatting();
    range.Find.Text = "Family";

    while (range.Find.Execute())
    {
          range.Select();
          range.Delete();
    }
    doc.Close();
    word.Quit(true, Type.Missing, Type.Missing);
}

尝试使用所需的操作录制宏。在VBA中调用的方法与Interop使用的方法相同。 - Panagiotis Kanavos
@theMayer 如果你尝试在Word中搜索高亮显示的单词,你就会理解这个问题。高亮显示不是一种格式属性。 - Panagiotis Kanavos
你是指这个吗?https://msdn.microsoft.com/zh-cn/vba/word-vba/articles/find-highlight-property-word - theMayer
不,我的意思是打开Word,进入查找对话框,尝试查找已经高亮的单词。那么你就会理解这种混淆了。 - Panagiotis Kanavos
我想找到所有被标记的单词;我只是在测试范围查找。我的目标是能够删除所有用红色标记的单词。 - user1331734
显示剩余3条评论
1个回答

2

Find.Highlight属性设置为true

Interop使用与VBA宏可用的相同对象和方法。您可以通过记录包含这些步骤的宏并检查它来找到执行任务所需的操作和属性。

通常情况下,属性与UI匹配,但不总是如此。如果某个属性在通用查找框中,则该属性很可能也在Find界面中。

例如,仅搜索突出显示的单词会产生以下宏:

Selection.Find.ClearFormatting
Selection.Find.Highlight = True
With Selection.Find
    .Text = ""
    .Replacement.Text = ""
    .Forward = True
    .Wrap = wdFindContinue
    .Format = True
    .MatchCase = False
    .MatchWholeWord = False
    .MatchWildcards = False
    .MatchSoundsLike = False
    .MatchAllWordForms = False
End With

这可以被翻译为:

range.Find.ClearFormatting();
range.Find.Highlight=1;
...
while(range.Find.Execute())
{
    ...
}

我将Find.Highlight属性设置为1,它起作用了!谢谢。 - user1331734

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接