如何逐字操作MS Word 2010文档

本文关键字:Word 2010文档 MS 操作 何逐字 | 更新日期: 2023-09-27 18:31:27

我想开发一个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文档中逐个操作单词的最有效方法是什么?

如何逐字操作MS Word 2010文档

对于这种情况 - 您实际上正在更改目标范围("单词")的内容,您需要使用一个"计数"索引的循环。例如:

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;

我强烈建议你不要在代码中使用 Select 或 Selection,除非你需要做的事情无法以任何其他方式完成。直接分配给 Range.Text 对象。

请注意,在 Word 中,在某些情况下,它有助于在文档中向后运行循环(从最高计数器到最低计数器)。但是,我认为这种情况会继续下去。