我想从文档中获取修订的文本和原始文本。我这样做:
Set wrdDoc = wrdApp.Documents.Open(fileName)
For each sent in wrdDoc.Sentences
if sent.Revisions.Count >=0 then
after=sent.text
sent.Revisions.RejectAll
before=sent.text
SaveRev(before,after)
End if
next
现在就可以了,除了格式错误的句子,例如
这是一句话,这是另一句话。
将以一种奇怪的方式进行解析。首先,会有一个:“这是一个句子。 ”,然后这两个都带有“这是一个句子。这是另一个。 ”
那里有修订时会发生什么?第一次迭代将还原第一句的修订,然后第二次迭代将不会“看到”该修订的部分。
最重要的是,第一次迭代将获取第一句的两个版本,第二次迭代将仅获取第一句的原始版本(同时从第二句获取两个版本)。
让我澄清一下:
假设我有原始的
我们从这句话开始,然后是这句话。
并被修订为
我们以这个句子和另一个句子结束。
第一次迭代将导致
之前:我们从这句话开始。
之后:我们以这句话结束。
但是第二次迭代将有
之前:我们以这句话和这句话结束。
之后:我们以这句话结束。
好吧,我所做的是更改逻辑,撤消了修订版本:
Set wrdDoc = wrdApp.Documents.Open(fileName)
For each sent in wrdDoc.Sentences
if sent.Revisions.Count >=0 then
wrdDoc.Undo
after=sent.text
sent.Revisions.RejectAll
before=sent.text
SaveRev(before,after)
End if
next
我之所以这样,是因为我得到的文档没有更改(最后一句话除外)。
事实是,这样做会将宏置于一个特定句子的无限循环中。
我不知道每个的机制,我不知道是什么导致它挂起。显然,改变集合会弄乱循环,但是我不明白为什么。
我可以将i = 0循环到wrdDoc.Sentences.Count,但是出于与我现在重复一遍相同的原因,我认为这会使我跳过句子,而且我不能冒险(即使我测试确定,我也必须确保它永远不会发生)。
因此,问题是:
非常感谢你!
PS:我可以提供示例文档,让我知道是否需要(也许我做错了的事已经对某个人清楚了,由于我无法共享正在处理的文档,所以我不得不制作示例)。
- 编辑 -
好的,这就是挂起的位置,仅在第32个文件上。
它不会挂在句子上,它实际上在文档的开头做了一些,然后又回到了开头。
我以前遇到过相同的错误,但是它只用一个句子就循环了,并且没有回到开头。我认为这是同样的问题。我将在此处尝试复制原始版本和修订版本。
原始版本
MAIN TITLE
Measurement of some variable
1 REQUIRED TOOLS
1.1 Special tools
NOTe:
Some note about the procedure (unaltered by revision)
Equipment name (carrier returned line)
(english) assemply with Equipment PN
Kit
Equipment name (carrier returned line)
(english) assemply with (Another) Equipment PN
Kit
Document continues...
重新启动循环之前,有2个设备条目。
修订包括插入文档编号,一些单词首字母大写以及更改设备PN和“套件”之间的顺序。
经过修改的版本
ducument number
MAIN TITLE
Measurement of Some Variable
1 REQUIRED TOOLS
1.1 Special Tools
NOTe:
Some note about the procedure (unaltered by revision)
Equipment name (carrier returned line)
(english) assemply with kit
Equipment PN
Equipment name (carrier returned line)
(english) assemply with kit
(Another) Equipment PN
Document continues...
记录的原始/修订对是:
原始....................................修订
{空} ......................................文件编号
某些变量的测量..............某些变量的测量
特殊工具.....................................特殊工具
(简体中文)............(简体中文)
(简体中文)............(简体中文)
然后它再次开始,记录相同的条目,直到我中断为止。我没有看到我说过的句子重叠,但是在修订版中插入了换行符。
谢谢!
枚举期间不应更改可枚举的对象,否则可能会发生不良情况(这取决于集合的类型)。
我的猜测是,修订/撤消过程与不可靠的句子结合在一起,导致句子的数量改变。
您应该先准备自己的收藏,看看有什么不同。只需尝试Set sents = New Collection: For Each sent in wrdDoc.Sentences: sents.Add sent: Next
然后将sends用于您的主要For Each循环即可。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句