在对 MS Word 进行编程以列出文本中字符样式发生变化的点时,有什么方法吗?
我正在以编程方式尝试分析段落以检索具有相同样式的所有连续文本块 - 换句话说,在文本样式更改的点处拆分段落。目前我这样做的方式是获取每个字符并将其样式与前一个字符进行比较 - 如果样式的名称不同,我知道我已经找到了拆分结果的点。这可行,但效率极低(对于每个字符,您必须对样式名称进行完整的字符串比较)。我想知道 Word 对象模型中是否有一种方法可以在不比较每个字符的情况下解决这个问题?
我目前使用的大致代码如下(它是 C# 代码:我正在使用 COM 互操作来对抗 Word 2003,但我对 VBA 中的解决方案同样满意,因为一旦我原则上知道如何去做,转换到 C# 应该很容易。)
// used to store the results as we go
StringBuilder currentText = new StringBuilder();
string currentStyle = null;
// range contains the Range I want to split up
foreach (Range charRng in range.Characters)
{
string style = charRng.get_Style().NameLocal;
if (style == currentStyle)
{
currentText.Append(charRng.Text);
}
else
{
AddTextBlockToMyResults(currentStyle, currentText.ToString());
currentText = new StringBuilder(charRng.Text);
currentStyle = style;
}
}
AddTextBlockToMyResults(currentStyle, currentText.ToString());