在Word中查找样式更改

时间:2013-04-08 15:46:31

标签: ms-word word-vba

编程MS Word时是否有任何方法列出文本中出现字符样式更改的点?

我以编程方式尝试分析段落以检索具有相同样式的所有连续文本块 - 换句话说,将段落拆分为文本样式更改的点。目前我采取的方式是采取每个角色并将其风格与前一个角色进行比较 - 如果风格的名称不同,我知道我已经找到了将结果分开的点。这可行,但效率极低(对于每个角色,你必须对样式名称进行完整的字符串比较)。我想知道在Word对象模型中是否有办法在不比较每个字符的情况下解决这个问题?

我目前正在使用的近似代码如下(它的C#代码:我使用COM Interop对抗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());

1 个答案:

答案 0 :(得分:2)

使用哪些版本的Office来创建Word文档?

如果它是Office 2007或更高版本(或者,您可以将文档转换为该格式),那么office文档实际上只是一个.zip存档。如果使用WinRAR等存档实用程序打开.docx文件,您将看到它具有如下目录结构:

_rels
customXml
docProps
word
|_ document.xml

该document.xml是一个Open Office XML文件,其中包含Word文档中样式的所有文本和引用。我打赌你可以解析XML比你现在正在做的事情快得多。