Word插件中HitHighlight高亮修改文档后自动消失问题求助
解决Word中HitHighlight高亮编辑后消失的问题
这个坑我之前踩过!你用的HitHighlight方法看起来好用,但它生成的高亮其实是临时的查找突出显示——本质上是Word内置查找功能的“突出显示匹配项”效果,不是真正给文本添加了持久的格式。一旦你编辑文档内容,Word会自动清除这种临时高亮,因为它默认认为你只是临时查看匹配项,不需要保留。
推荐解决方案:用查找替换应用持久格式
直接通过查找替换功能给目标文本应用真正的字符格式,这样编辑文档时高亮就不会消失了。代码调整如下:
word.Find find = rng.Find; // 清除查找的格式残留 find.ClearFormatting(); find.Text = wd; find.MatchCase = true; find.MatchWholeWord = true; // 设置替换的格式:高亮+红色字体+红色下划线 word.Replacement.ClearFormatting(); word.Replacement.Highlight = true; word.Replacement.Font.Color = word.WdColor.wdColorRed; word.Replacement.Font.UnderlineColor = word.WdColor.wdColorRed; // 执行全部替换,把所有匹配项替换成带格式的文本 find.Execute(Replace: word.WdReplace.wdReplaceAll);
这个方法的核心是:我们不是临时“标记”匹配项,而是直接修改文本的字符格式,所以格式会和文本绑定,编辑时也不会丢失。
备选方案:将HitHighlight的临时高亮转为持久格式
如果你因为某些原因必须先用HitHighlight,也可以在执行后把临时高亮转成持久格式。不过这个方法效率不如直接替换,而且需要注意时机:
// 先执行原来的HitHighlight find.Wrap = word.WdFindWrap.wdFindContinue; find.Font.UnderlineColor = word.WdColor.wdColorRed; find.HitHighlight(FindText: wd, MatchCase: true, TextColor: word.WdColor.wdColorRed, MatchWholeWord: true, HighlightColor: word.WdColor.wdColorLightYellow); // 遍历所有找到的范围,手动应用持久格式 foreach (word.Range foundRange in rng.Find.FoundRanges) { foundRange.HighlightColorIndex = word.WdColorIndex.wdYellow; foundRange.Font.Color = word.WdColor.wdColorRed; foundRange.Font.UnderlineColor = word.WdColor.wdColorRed; }
注意:FoundRanges集合仅在HitHighlight执行后短期内有效,所以要紧接着处理,不然可能会获取不到正确的范围。
小提示
如果要高亮多个单词,每次处理新单词前,一定要调用find.ClearFormatting()和word.Replacement.ClearFormatting(),避免上一次的格式设置影响下一次查找结果哦!
内容的提问来源于stack exchange,提问作者Vishnu Kay Vee
相关产品推荐
相关产品推荐

