【发布时间】:2022-12-09 17:52:50
【问题描述】:
我需要比较两个文本,我正在使用以下脚本使用 MS Word:
dim ORIGINAL
dim REVISED
dim WORD_COMPARE
dim objWord
Set objWord = CreateObject("Word.Application")
objWord.DisplayAlerts = WdAlertsNone
objWord.Visible = True
set ORIGINAL = objWord.Documents.Open(WScript.Arguments.Unnamed.Item(0), False, True, False) ' ORIGINAL DOCX
Set REVISED = objWord.Documents.Open(WScript.Arguments.Unnamed.Item(1), False, False, False) ' MODIFIED.DOCX
dim wordCompareResultFilePath:wordCompareResultFilePath = WScript.Arguments.Item(3) ' FILE RESULT PATH
Set WORD_COMPARE =_
objWord.CompareDocuments(_
ORIGINAL,_
REVISED,_
1,_
1,_
False,_
False,_
true,_
False,_
False,_
True,_
False,_
False,_
False,_
True, _
"COMPARER_USER",_
False)
dim printLines:printLines=""
for each revision in REVISED.Revisions
'printLines = printLines & original.range(revision.range.paragraphs.item(1).range.start).paragraphs.item(1).range.text & vbCrLf ' GET THE ORIGINAL PARAGRAPH
printLines = printLines & revision.range.paragraphs.item(1).range.start & vbCrLf
next
Set stream = CreateObject("ADODB.Stream")
stream.Open
stream.Type = 2 'text
stream.Position = 0
stream.Charset = "utf-8"
stream.WriteText printLines
stream.SaveToFile wordCompareResultFilePath, 2
stream.Close
ORIGINAL.Close False
REVISED.Close False
objWord.Quit
WScript.Quit Err.Number
要执行它,我在 cmd 中使用以下 .bat 文件:
cscript.exe "C:\Users\x\Desktop\comparer\comparer_step1.vbs" "C:\Users\x\Desktop\comparer\original.docx" "C:\Users\x\Desktop\comparer\modificado12.docx" "C:\Users\AdminRPozuelo\Desktop\comparer\87a0ba51-d28e-48b1-8c93-c57e276b72d3.docx")
我用它来执行比较并获得例如索引 修订以便在原件中使用以获取原始文本(脚本中的 foreach 行)。据我所知,Word 女士返回两个修订,用于简单的替换插入和删除(或删除和插入,取决于如何指定参数)。当我在我的本地机器上执行它时工作正常并且我得到以下索引进行简单更改(替换),据我所知是好的,因为索引应该是相同的:
但是,当我在其他机器上使用它时,即使使用相同的 MS Word 版本(msword 2019)也会返回不同的结果,例如在带有 MSWord 2016 的 Microsoft 服务器中,相同的更改返回以下索引:
因此我的问题是:为什么这一行在不同的机器上为相同的文本生成不同的索引:
revision.range.paragraphs.item(1).range.start
我怀疑我需要在比较中指定更多参数。 有人可以帮助我吗?
非常感谢你提前。
附言我为我的英语道歉,莎士比亚此刻一定在他的坟墓里翻滚。
【问题讨论】:
-
对不起,我刚刚更改了它。
-
您何时何地运行脚本?它是在网络服务器上还是在服务应用程序上?
-
我都尝试了相同的结果。
-
当您手动运行它时(不是从服务应用程序)它是否正常工作?
标签: ms-word vbscript server-side office-automation com-automation