使用 Word.Application 对象比较两个文档时,什么可能导致“命令失败”错误?

软件测试 自动化测试 测试完成8
2022-01-31 18:32:56

我有两个word文档,分别是测试的“结果”和“预期的结果”。我正在使用以下代码来比较两者并检查差异。

Sub CompareTest 
  Dim wrdApp 
  Dim revTemp 
  Dim file1, file2, differences 
  Set wrdApp = Sys.OleObject("Word.Application") 
  file1 = "C:\TestDocs\Site Initiation.doc"   
  file2 = "C:\TestDocs\Site Initiation_observer.doc" 
  differences = "C:\TestDocs\differences.doc" 
  call wrdApp.Documents.Open(file1)  
  call wrdApp.ActiveDocument.Compare(file2, "", 1)   
  Set revTemp = wrdApp.Selection.NextRevision(True) 
  If Not (revTemp Is Nothing) Then 
    wrdApp.ActiveDocument.SaveAs differences  
    wrdApp.Documents.Close 
    Call Log.Warning "Documents are not identical", "Please see the differences in " & differences  
  Else 
    Call Log.Message "Documents are identical"    
  End If 
  wrdApp.Quit False 
End Sub

无论出于何种原因,对于我们这样比较的大多数 word 文档,一切正常。但是,对于我们正在比较的其中两个,我们在调用“比较”方法的行上得到“命令失败”。

我在网上搜索了 Microsoft 的库、众多博客等,没有人能给我一个具体的情况,即这段代码适用于 MOST 文档但不适用于某些场景。我尝试颠倒文档的顺序,更改文档名称和目录路径以更兼容 8.3 格式。我也尝试将每个文档与自身进行比较。

一点帮助将不胜感激。

仅供参考,这是在 TestComplete 自动化测试工具中运行的代码,因此“Sys.OleObject”和“Log”对象的细节在该工具内部。我们使用了“CreateObject”并注释掉了 Log 调用,但无济于事。

2个回答

我的转录调试会话如下 - 简短的回答是,如果比较文档中存在未接受的修订更改,比较将失败。

详情

这里有一些线索和可能的答案。

  1. 我重现了错误
  2. 我复制了第一个文档并将其与自身进行了比较——这很有效。
  3. 我制作了第二个文件的副本并将其与自身进行了比较 - 重现了命令失败错误
  4. 我尝试从 word 中手动比较 step3 (...observation.doc) 中的文档。它有效,但我必须确认可以与跟踪的更改进行比较
  5. 基于上述情况,我接受了所有更改并保存了原始文档,然后重新进行了比较——它成功了!

所以——这与对文档的不可接受的更改有关。

我最后的实验是获取一个简单的文档,打开轨道更改,进行一些编辑,然后保存而不接受。我将此文档与自身进行了比较并重现了错误(命令失败)。

我的建议:在比较之前保存未接受的更改(如果需要,您可以使用脚本中的 Document.AcceptAllRevisions)。

创建了一个自动应用程序 (.exe) 以使用 windows schedular 生成 word 文档,我们每 1 小时调用一次 .exe 文件。

在保存(saveas)时抛出错误消息“命令失败”,如果它是通过使用 Windows 调度程序执行的(选择甚至用户注销系统选项)。

通过手动执行 .exe 文件不会引发错误(成功创建文档)。