【问题标题】:Keeping Excel open after Application ends (Delphi Automation)应用程序结束后保持 Excel 打开(德尔福自动化)
【发布时间】:2013-03-20 09:47:22
【问题描述】:

我正在使用 Delphi 2007 的 ExcelXP 组件,如 here 所述,连接到 MS Excel 并填充工作表中的一些字段。这可以正常工作,我可以随心所欲地修改工作表。

但是,我希望 Excel 在应用程序结束后保持打开状态,但前提是 Excel 中有打开的工作表。我可以使用ExcelApplication.Workbooks.Count 获取打开的工作簿的数量,因此在应用程序结束时检查是否打开了任何工作簿并在OnDestroy 或类似期间关闭 Excel 将是一项简单的任务。

现在我被困在 Excel 关闭的情况下,无论我的应用程序结束后是否有任何打开的工作簿。不是因为有任何.Disconnect.Quit 电话,当我把它们全部拿出来时,它仍然会这样做;我的应用程序关闭后,Excel 仍然会关闭。

有没有人知道如果有打开的工作簿,我如何让 Excel 保持打开状态,并在没有工作簿时关闭它?

更新:我的 TExcelApplication 的 AutoQuit 属性设置为 True。原来这一直是问题所在。

【问题讨论】:

  • 我无法重现您所描述的内容。这个问题缺少一些东西。
  • 已解决:我的 TExcelApplication 的 AutoQuit 属性设置为 True,我相应地更新了我的问题。我这边的愚蠢错误。不过不要删除问题,以防有人遇到同样的问题,我知道我可以利用它。

标签: excel delphi ms-office ole delphi-2007


【解决方案1】:

回答我自己的问题时,我的同事注意到 TExcelApplication 组件有一个 AutoQuit 属性。将其设置为False,Excel 将保持打开状态。现在我可以在OnDestroy 事件中手动退出/断开 Excel 连接。

【讨论】:

    【解决方案2】:

    下面的Deborah Pate's page 向我建议,如果没有 Delphi 对象引用 ExcelXP,ExcelXP 会自动关闭 Excel。这不是 MS Interop 组件的问题:

    但是请注意,除非您释放了所有工作簿和工作表变量,否则 Excel 将在内存中徘徊,不可见地运行。断开任何组件,将任何接口变量设置为 nil,并将任何变体设置为 Unassigned 以防止这种情况发生。

    【讨论】:

    • 感谢您的快速回答,让我和我的同事走上了正确的道路:)
    猜你喜欢
    • 2017-10-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-07-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多