Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/vba/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Vba 查看Word中的样式变化_Vba_Ms Word - Fatal编程技术网

Vba 查看Word中的样式变化

Vba 查看Word中的样式变化,vba,ms-word,Vba,Ms Word,在编程MS Word时,有没有办法列出文本中字符样式发生变化的点 我正在以编程方式尝试分析段落,以检索具有相同样式的所有连续文本块——换句话说,在文本样式更改的点拆分段落。目前我的做法是将每个角色的样式与前一个角色的样式进行比较——如果样式名称不同,我知道我已经找到了一个分割结果的点。这是可行的,但效率极低(对于每个字符,必须对样式名进行完整的字符串比较)。我想知道在Word对象模型中是否有一种方法可以在不比较每个字符的情况下解决这个问题 我目前使用的大致代码如下(它是C代码:我对Word 20

在编程MS Word时,有没有办法列出文本中字符样式发生变化的点

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

我目前使用的大致代码如下(它是C代码:我对Word 2003使用COM互操作,但我同样乐意使用VBA中的解决方案,因为一旦我原则上知道如何做,转换为C应该很容易。)

用于创建Word文档的Office版本是什么

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

_rels
customXml
docProps
word
|_ document.xml

该document.xml是一个包含Word文档中所有文本和样式引用的文件。我打赌你可以比现在做的更快地解析XML

狡猾:-)是的,从性能上看,这样会大大提高效率。但是,我需要做大量的工作,因为我必须理解并编写代码来解析document.xml,因此使用Word对象模型的解决方案更可取。我会考虑你的想法作为最后的手段。嗯,我了解你的沉默,切换路径…但我不认为会有那么糟糕。您不必真正理解完整的XSD,也不必知道所有标记的含义——只要您能够找出哪些标记意味着样式的改变。我打赌您可以通过一些样式更改来模拟一个虚拟文档,看看Word是如何实现它们的。在这一点上,您只是在寻找您关心的标记,可能会忽略其余的标记。无论如何,祝你好运:-),Office COM层并不是最友好的。在查看了docx格式之后,我同意你的看法。Office COM层给了我无数的问题(我认为主要是因为缺乏像样的文档),而document.xml文件几乎是自文档化的。或许,沿着这条路走下去是值得的。
_rels
customXml
docProps
word
|_ document.xml