如何逐字操作 MS Word 2010 文档
How to manipulate MS Word 2010 document word by word
我想开发一个 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()
总是 returns 第一个词。如果我删除行 word.Text = MyCorrecter(word.Text);
,代码会成功地迭代所有单词。周围有 find/replace 个示例,但这些示例对于这种特殊情况不是很有效。
简而言之,在 Word 文档中一个一个地操作单词的最有效方法是什么?
对于这种情况——您实际上是在更改目标范围 ("word") 的内容,您需要使用一个 "counts" 带有索引的循环。例如:
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 中的某些情况下,它有助于 运行 向后循环遍历文档(从最高计数器到最低计数器)。不过,我认为这种情况会继续下去。
我想开发一个 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()
总是 returns 第一个词。如果我删除行 word.Text = MyCorrecter(word.Text);
,代码会成功地迭代所有单词。周围有 find/replace 个示例,但这些示例对于这种特殊情况不是很有效。
简而言之,在 Word 文档中一个一个地操作单词的最有效方法是什么?
对于这种情况——您实际上是在更改目标范围 ("word") 的内容,您需要使用一个 "counts" 带有索引的循环。例如:
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 中的某些情况下,它有助于 运行 向后循环遍历文档(从最高计数器到最低计数器)。不过,我认为这种情况会继续下去。