3

并将结果绘制在 Excel 中的二维单元格中?我正在使用 C#、.NET、Excel-DNA、Add-In Express RTD、

谢谢

编辑我试过http://excel-dna.net/2011/01/30/resizing-excel-udf-result-arrays/,对我不起作用。我想要这样 MyUDF(param1, param2) 返回一个二维数组,如基于 param1 长度的表,param2 说 param1 是“a,b,c”,param2 是“high,low”,预计返回一个数组 [3,2],并以 3 行 2 列的形式显示结果

我还尝试了 Excel ExcelDNA C# / 尝试复制 Bloomberg BDH() 行为(在 Web 请求后写入数组),它工作正常。但我的要求是backgroundworker会调用RTD函数,RTD函数是一个多步骤的过程,首先它会登录(异步,然后订阅(异步),当我从后台调用xlcall.RTD时,它给出了访问违规异常

4

1 回答 1

1

Excel UDF 和 RTD 是被动的东西。当用户输入公式时,Excel 会调用 UDF(RTD 函数)来计算公式并将结果放回调用单元格。与 RTD 不同,UDF 可以找出调用它的位置,但它们都不能“扩展”调用范围。扩展范围还会修改其他单元格中的公式/值——这不是 UDF 允许的;RTD 服务器根本无法访问 Excel 对象模型。

考虑将 COM 加载项和 RTD 服务器组合在同一个程序集中。COM 加载项可以处理 SheetChange 事件以确定用户是否输入了引用您的 RTD 的公式。发生这种情况时,COM 插件可以用公式或数据填充任何所需的单元格范围,还可以设置一些标志或存储 RTD 可访问的数据。此外,RTD 可以调用插件中定义的公共方法,并且可以通过这种方式填充任何单元格。如果你选择这个选项,你无疑会在 RefreshData 事件中调用这样的方法。但是请注意,此时 Excel 可能尚未准备好接受修改单元格的 COM 调用。为避免潜在问题,我建议在延迟后修改单元格,请参阅 ADXAddinModule.SendMessage() 方法和 ADXAddinModule.OnSendMessage 事件。

你怎么看?

白俄罗斯的问候 (GMT+3),

Andrei Smolin Add-in Express 团队负责人

于 2012-09-10T14:12:08.963 回答