将Range.Text与Range.Start和Range.End相关联

时间:2010-09-22 19:34:47

标签: ms-word vsto word-vba

我正在使用正则表达式来搜索以下属性返回的纯文本:

namespace Microsoft.Office.Interop.Word
{
    public class Range
    {
        ...
        public string Text { get; set; }
        ...
    }
}

根据匹配,我想对与纯文本对应的格式化文本进行更改。我遇到的问题是.Text属性中的字符索引与.Start对象的.EndRange属性不匹配。有谁知道如何匹配这些指数?

(我不能使用Word通配符查找功能(作为.NET正则表达式的替代),因为它们对我正在搜索的模式(非贪婪的运算符等)不够强大。)

我可以从Document.Range().Collapse(WdCollapseStart)然后range.MoveStart(WdUnitChar, match.Index)开始移动正确的字符数,因为按字符移动会匹配格式化的文本位置以及纯文本中的匹配项。

我现在的问题是,格式化文本中我总是4个字符太远......所以它可能与其他故事范围有关吗?我不确定......

1 个答案:

答案 0 :(得分:1)

显然我的比赛仍然关闭的原因与隐藏的“贝尔”字符(char bell = '\a';)有关。通过用Application.ActiveDocument.Range().Text中的空字符串替换它们,我在此属性上的匹配项现在可以正确匹配以下范围:

Word.Range range = activeDocument.Range();
range.Collapse(Word.WdCollapseStart);
range.MoveStart(Word.WdUnits.Character, regexMatch.Index);

基本上,您可以通过逐个字符地移动格式化文本来镜像.Text属性中的索引。唯一需要注意的是,您需要从.Text属性中删除诸如铃声字符之类的奇怪字符。