【问题标题】:How can Excel send a notification to my Delphi app? [closed]Excel 如何向我的 Delphi 应用程序发送通知? [关闭]
【发布时间】:2020-11-22 06:29:00
【问题描述】:

我有一个使用 TExcelApplicationTExcelWorkbookTExcelWorksheet 的 Delphi 10.4.1 应用程序。

Delphi 应用程序可以读取和写入 Excel 一切正常。

我想要的是,如果在 Excel 中更改、添加或删除工作表的名称,那么会向我的 Delphi 应用程序发送一条“消息”。我需要一个“触发器”,然后我的应用程序可以调用 ExcelApplication1.ActiveWorkbook.Sheets 并获取工作表名称列表。

我曾想过在我的应用程序调用ExcelApplication1.ActiveWorkbook.Sheets 中有一个工作线程循环并检查更改,但这似乎效率不高。尤其是考虑到工作表名称的更改并不是那么频繁。

是否有我可以拦截的 Windows 消息?

【问题讨论】:

  • 也许file change notification 可以提供帮助(当然需要您保存文档)。
  • 这种需求的原因是什么?根据实际原因,可能还有其他方法可以解决您遇到的问题。

标签: excel delphi


【解决方案1】:

一种解决方案是创建一个可自动化的 Delphi 应用程序,然后从 Excel(或任何其他能够实现自动化的应用程序)调用它,例如使用 VBA 宏。无需新应用程序,您可以将该功能添加到现有应用程序中。

以下是概述的步骤:

  1. 创建一个新的VCL forms application
  2. 添加automation object
  3. 使用类型库编辑器添加您将从 VBA 调用的 API。
  4. 实现 API
  5. 编译
  6. 通过使用管理员权限和 /REGSERVER 作为参数从命令行运行应用程序来注册您的应用程序
  7. 编写一个 VBA 宏调用您的应用程序(使用 CreateObject 连接到您的应用程序)。

您可以在https://francois-piette.blogspot.com/2013/01/microsoft-word-or-excel-calls-delphi.html找到详细说明

【讨论】:

  • VBA 宏如何知道工作表已被删除或重命名?
  • 这不是你问的问题......这不是Delphi问题,而是Excel问题。那里已经回答了另一个问题:stackoverflow.com/questions/42156969/…
  • 如果您的问题可以接受我的回答,请将其标记为“已接受”(答案左侧的复选标记)。谢谢。
  • 很好的答案,但我真的想避免使用 Excel 宏。我不想在我客户的 Excel 中添加任何内容。
  • @BobSmall:没有其他方法可以满足您的要求,无论您是否想避免它。没有与第三方应用程序(在本例中为 Excel)相关的 Windows 消息,该应用程序在内部执行更改数据或添加工作表等操作。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-06-23
  • 1970-01-01
  • 2018-04-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多