1

在对 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());
4

1 回答 1

2

使用什么版本的 Office 来创建 Word 文档?

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

_rels
customXml
docProps
word
|_ document.xml

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

于 2013-04-08T16:09:28.317 回答