我想开发一个MS Word 2010加载项(2013/2016),它的工作方式类似于土耳其语文本的拼写检查程序(恢复重音字符)。我想给用户提供3个选项(通过上下文菜单)来使用该工具。
对于第一个选项,我尝试迭代所有单词并通过以下代码逐个修复它们:
var words = App.ActiveDocument.Words;
foreach (Range word in words)
{
var corr = MyCorrecter(word.Text);
word.Select();
App.Selection.TypeText(corr);
}
然而,这种情况陷入了无限循环。 word.Next()
始终返回第一个单词。如果我删除行word.Text = MyCorrecter(word.Text);
,代码会成功迭代所有单词。有查找/替换示例,但对于这种特殊情况,这些并不是非常有效。
简而言之,在Word文档中逐个操作单词的最有效方法是什么?
答案 0 :(得分:1)
对于这种情况 - 您实际上正在更改目标范围(“单词”)的内容,您需要使用带有索引“计数”的循环。例如:
Word.Words words = app.ActiveDocument.Words;
int iWordCount = words.Count;
Word.Range rngWord = null;
for (int i = 1; i<= iWordCount; i++)
{
rngWord = words[i]
var corr = MyCorrecter(rngWord.Text);
rngWord.Text = corr;
}
//When you're done, dont' forget to release the COM objects
rngWord = null;
words = null;
我强烈建议您不要在代码中使用“选择”或“选择”,除非您需要做的事情不能以其他方式完成。直接分配给Range.Text对象。
请注意,在Word中有些情况有助于在文档中向后运行循环(从最高计数器到最低计数器)。不过,我认为这种情况会继续发展。