【问题标题】:Look for Style Changes in Word在 Word 中查找样式更改
【发布时间】:2020-07-07 05:34:31
【问题描述】:

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

【问题讨论】:

    标签: vba ms-word


    【解决方案1】:

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

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

    _rels
    customXml
    docProps
    word
    |_ document.xml
    

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

    【讨论】:

    • Cunning :-) 是的,性能方面会大大提高效率。虽然我必须理解并编写代码来解析 document.xml,但需要做很多工作,因此使用 Word 对象模型的解决方案会更可取。我会考虑你的想法作为最后的手段。
    • 嗯,我理解你对切换路径的沉默……但我不认为这会像所有这些一样糟糕。您不必真正了解完整的 XSD 或知道所有标签的含义——只要您能挑选出哪些标签意味着样式的变化。我敢打赌,您可以模拟一个带有一些样式更改的虚拟文档,然后看看 Word 是如何实现它们的。那时你只是在寻找你关心的标签,可能会忽略其余的标签。无论如何祝你好运:-),Office COM 层并不是最友好的。
    • 在看了 docx 格式之后,我同意你的看法。 Office COM 层给我带来了无穷无尽的问题(我认为主要是由于缺乏像样的文档),而 document.xml 文件几乎是自记录的。走这条路可能很值得。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-04-16
    • 1970-01-01
    • 2018-05-10
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多