5

我在 C# 中为 Excel 创建了一个 RTD 服务器,它不断用数据更新单元格,并且需要处理多个 Excel 实例。问题是,如果我在多个 Excel 实例中具有相同的 RTD 公式,并且我删除了其中一个 Excel 实例中的公式,它会调用 RTD 服务器中的 DisconnectData 方法,因此其他 Excel 实例中的相同公式将停止更新即使他们仍然应该更新。

C# 中是否有办法强制每个 Excel 实例拥有自己的 RTD 服务器,或者 RTD 服务器是否有办法正确识别 Excel 的多个实例并在调用之前检查公式的所有实例是否已从所有 Excel 工作簿中删除我的 RTD 服务器中的 DisconnectData 方法。

4

2 回答 2

2

假设您的 RTD 函数使用 UDF 包装,一种解决方案是从 UDF 调用中为每个工作表分配一个标识符(例如 Guid)。您可以将标识符保留为自定义工作表属性,然后将其添加到每个传出 RTD 主题,这将为每个工作表在到达您的 RTD 服务器时生成一组唯一的主题。

但是,在处理大量函数时,使用每个 RTD 调用访问自定义工作表属性会对性能产生影响,因此您应该在短时间内缓存标识符以缓解这种情况。一种方法是维护由工作表对象键入的字典查找。在每个 UDF 调用的范围内,通过 Application.Caller 属性获取调用单元格关联的工作表(将其转换为 Range 并从中获取工作表属性),然后在字典中查找标识符。

于 2013-07-16T01:01:50.487 回答
0

我认为这是您的问题http://support.microsoft.com/kb/284883 您如何注册您的 RTD 服务器?它是 DCOM 对象吗?

于 2013-06-05T14:49:27.597 回答