如何使用 OLE 自动化关闭 Word 文档?

Posted

技术标签:

【中文标题】如何使用 OLE 自动化关闭 Word 文档?【英文标题】:How do I close a Word doc using OLE automation? 【发布时间】:2015-02-05 18:11:35 【问题描述】:

我正在维护一个使用 OLE 自动化嵌入 Word 的应用程序。但是,当包含文档的选项卡在某些情况下关闭时,Word 进程将挂起文件 - 即使在关闭我们的应用程序之后也是如此。

我一直在寻找如何关闭 Word 中的文件,我遇到了https://msdn.microsoft.com/en-us/library/office/ff196343.aspx,这表明我想调用某种Close 方法,但它似乎不起作用。

Word 是这样打开的:

clientSite = new OleClientSite(frame, SWT.NONE, Word97To2003ClassId, file);
automation = new OleAutomation(clientSite);

我可以调用automation.getIDsOfNames(new String[]) "Close" )[0],它会返回1105。但是当我打电话给automation.invoke(1105) 时,它仍然让我的文档保持打开状态。知道框架关闭时如何关闭文档吗?

【问题讨论】:

【参考方案1】:

根据我的经验,有很多 API 方法根本不起作用。可能“关闭”就是其中之一。

也许您可以确保OleClientSite 在选项卡或应用程序之前被释放。

我在执行以下操作时遇到了一个对话框问题(不是很好,但很有效):

    @Override
    public boolean close() 
        // make sure clientSite is disposed first
        if (clientSite != null && !clientSite.isDisposed()) 
            clientSite.dispose();
        
        return super.close();
    

【讨论】:

以上是关于如何使用 OLE 自动化关闭 Word 文档?的主要内容,如果未能解决你的问题,请参考以下文章

如何在不使用 OLE 的情况下在 delphi 中将 word 文档转换为 pdf?

使用 java 中的 OLE 自动化将 word 文件拆分为多个较小的 word 文件

MS Word Ole 自动化、ADO 和外来字符

如何使用C#将包含文字、图片和表格的二进制数据写入到word文件中

Perl 的 OLE 自动化基础知识

在word中输入分数的软件