我已经在C#中为Excel创建了RTD服务器,该服务器不断更新数据单元格,并且需要使用多个Excel实例。问题是,如果我在多个Excel实例中都具有相同的RTD公式,并且删除了其中一个Excel实例中的公式,它将在RTD服务器中调用DisconnectData方法,因此在其他Excel实例中的相同公式将停止更新即使它们仍应进行更新。
C#中是否可以强制每个Excel实例拥有自己的RTD服务器,或者RTD服务器可以正确识别多个Excel实例并在调用之前检查是否已从所有excel工作簿中删除了公式的所有实例?我的RTD服务器中的DisconnectData方法。
最佳答案
假设您的RTD函数是用UDF包装的,一种解决方案是从UDF调用中为每个工作表分配一个标识符(例如Guid)。您可以将标识符保留为自定义工作表属性,然后将其添加到每个传出的RTD主题中,这将在每个工作表到达RTD服务器时为它们带来唯一的主题集。
但是,在处理大量函数时,每次RTD调用访问自定义工作表属性都会对性能产生影响,因此,您应该在短时间内缓存标识符以缓解这种情况。一种方法是维护由工作表对象作为关键字的字典查找。在每个UDF调用的范围内,通过Application.Caller属性获取与调用单元格关联的工作表(将其广播到Range并从中获取工作表属性),然后在字典中查找标识符。