首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Word.Application (Office2016)对象.quit()方法在LS中挂起

Word.Application (Office2016)对象.quit()方法在LS中挂起
EN

Stack Overflow用户
提问于 2017-09-21 03:36:46
回答 3查看 1.1K关注 0票数 0

我有一个预定的LotusScript代理,它在客户机上运行(9.0社交版)。它的目的之一是打开Word文档并将其另存为PDF,但这并不重要。下面是相关的代码片段

代码语言:javascript
复制
Declarations
Dim wrdApp as Variant

Sub Initialize

[Getting the usual Notes Session, Database, View values]
    Set wrdApp = createObject("Word.Application")
    wrdApp.visible = True
starthere:
    'we check to see if there is anything that has been deferred
    Set v = db.GetView("RIT")
    strStatus = "Success"

    Set doc = v.Getfirstdocument()
    If (doc Is Nothing) Then Exit Sub
[Snip]
End Sub

Sub Terminate
    wrdApp.visible = True

    Dim quitCode As Variant
    quitCode = 0
    Call wrdApp.quit(quitCode)
    Print "Quit called, waiting 3 seconds"
' Wait a couple seconds
    Sleep(3)
    Print "Done waiting, setting wrdApp to Nothing"
    Set wrdApp=Nothing
    Print "Exiting agent"
End Sub

我遇到的问题是,自从我们升级到Office 2016后,有时代理永远不会终止。在日志中,我看到了"Done waiting,setting wrdApp to Nothing“,但没有看到"Exiting agent”。我最终打开了一个Word窗口(当然没有文档),当我在任务管理器中查看时,我看到一个WINWORD.EXE正在运行,CPU为0%,CPU时间为2到3秒。当然,这也不是每次都会发生,这只是为了增加趣味性。由于代理永远不会结束,所以所有其他调度的代理都会被挂起,直到我删除僵尸单词实例。我已经尝试了我能找到的所有建议(您会注意到我让Word可见,并使用一个变量作为退出的参数,我甚至出于分离而抛出了睡眠(3)),但都没有起到任何作用。在Office2010中,我们从来没有遇到过这个问题(即使代理代码要草率得多)。此外,无论我是否实际打开Word文档,问题都可能发生。有解决方案吗?还是回到O2010是唯一的选择?

EN

回答 3

Stack Overflow用户

发布于 2017-09-25 20:30:48

很抱歉让您久等了。我开发了一个包装类,它可以“透明地”处理Word和OpenOffice文件。你可以在下面找到它的一部分。我的客户从来没有抱怨过代码不再工作,但这也可能是因为他们使用库打开使用模板的文档,然后用数据填充文档,然后让文档保持打开状态。

乍一看,有一个不同之处:我在您退出的地方使用Close。

--打开文档

代码语言:javascript
复制
Function CreateMSWordDocument As Variant
    Dim msWord As Variant

    On Error Goto CreateNewInstance
    Set msWord = GetObject("", "Word.Application")
Done:
    Set CreateMSWordDocument = msWord
    Exit Function
CreateNewInstance:
    Print "Loading Microsoft Word.... Please Wait...."
    Err = 0
    Set msWord = CreateObject("Word.Application")
    Print "Microsoft Word Loaded"
    Resume Done
End Function

Set wdDoc= CreateMSWordDocument

--再次关闭:

代码语言:javascript
复制
Sub Close
    Call wdDoc.Close
End Sub

除了上面这些,我没有更多的信息给你。

票数 0
EN

Stack Overflow用户

发布于 2017-10-03 20:07:45

我不确定这是否仍然与你相关。

我已经使用Word很久了,就像你做的那样(只是把它包装在一个类中)。然而,我也遇到过完全相同的问题。

解决方案是在我关闭文档后什么也不做-然后WINWORD任务就会在后台静静地退出!

HTH /John

票数 0
EN

Stack Overflow用户

发布于 2017-12-28 05:07:37

作为更新/回答这个问题的一种方式,我放弃了寻找真正的答案,而是编写了一个C#程序,该程序可以查找任何运行时间超过15分钟的WINWORD.EXE实例,并终止该进程。然后,我使用Task Scheduler每15分钟启动一次该程序。它是粗糙和丑陋的,但它扑灭了我之前的4级火警。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/46330465

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档