c# - 如何在 Word 应用程序中将突出显示 ColorIndex 属性重置为不突出显示
问题描述
我在带有书签的 word 文档的标题中添加文本。
然后突出显示书签的文本。
但是,如果在那之后我输入或输入一些其他文本也会得到突出显示。
我的代码是:
Word.Document currDocument = WordApp.ActiveDocument;
Word.Selection currentSelection = WordApp.Selection;
if(currentSelection.HeaderFooter.IsHeader)
{
Word.Range selectionRange = currentSelection.Range;
selectionRange.Text ="abc";
currentDocument.Bookmarks.Add("bookmark", selectionRange);
currentDocument.Bookmarks[bookmarkName].Select();
WordApp.Selection.Range.HighlightColorIndex = WdColorIndex.wdBrightGreen;
**//from here I want to set highlight as off**
}
我想只突出书签部分,而不是在那之后。
解决方案
使用Selection
对象总是很棘手,如果可能的话应该避免。有时它会有所帮助,但在大多数情况下,使用Range
对象更可靠。Selection
几乎反映了用户必须如何工作。如果作为用户,您键入内容、选择它、应用突出显示,然后再键入一些内容,您就会看到所描述的行为。作为用户,您需要选择您输入的内容并删除突出显示 - 即使它只有一两个字符。从那时起,突出显示就消失了。无论是作为用户还是试图在代码中模仿它,这都是痛苦的。
考虑问题中代码的以下变体。插入书签后,使用该属性将第二个Range
对象设置为原始对象。(很重要,否则这两个对象将是相同的 - 改变一个也会改变另一个。)Range
Duplicate
Duplicate
Range
这第二个Range
对象被移动到原始位置之外的位置Range
。现在可以对两者进行不同的处理。不像一个Selection
代码可以与许多Ranges
.
Word.Document currDocument = WordApp.ActiveDocument;
Word.Selection currentSelection = WordApp.Selection;
if(currentSelection.HeaderFooter.IsHeader)
{
Word.Range selectionRange = currentSelection.Range;
selectionRange.Text ="abc";
currentDocument.Bookmarks.Add("bookmark", selectionRange);
//currentDocument.Bookmarks[bookmarkName].Select();
Word.Range rngAfterBookmark = selectionRange.Duplicate;
//go to the end of the bookmarked range
rngAfterBookmark.Collapse(Word.WdCollapseDirection.wdCollapseEnd);
//make sure the two ranges are no longer adjacent
rngAfterBookmark.Text = " ";
rngAfterBookmark.Collapse(Word.WdCollapseDirection.wdCollapseEnd);
selectionRange.HighlightColorIndex = WdColorIndex.wdBrightGreen;
}
注意:通常我什至不会使用Selection
页眉或页脚,而是使用页眉或页脚的Range
. 我没有改变这一点,因为直到此时我才知道代码的逻辑。
推荐阅读
- scala - 我应该如何为元组实现 scala 解释器?
- docusignapi - 用最后一个签名的日期填充生效日期的docusign
- java - 获取类名
- postman - 让 Postman 在监视器 2 上打开
- azure - 没有为丰富的通知启用 Azure Active Directory 工作负载
- powershell - 当 cmd 的类型适用于同一文件时,为什么 PowerShell 的 Get-Content 会返回“无法读取/拒绝访问”?
- java - java中StreamTokenizer的问题
- c# - Unity/C#:可控滚球的一致性
- ssl-certificate - 谷歌信任服务证书问题
- javascript - 将数据转换为所需格式后,select2 不会显示结果