如何创build一个返回二维数组的UDF

并将结果绘制在Excel中的二维单元格中? 我正在使用C#,.NET,Excel-DNA,加载项快速RTD,

谢谢

编辑我试过http://excel-dna.net/2011/01/30/resizing-excel-udf-result-arrays/ ,不适合我。 我想要这样的MyUDF(param1,param2)返回一个基于param1的长度的表的2D数组,param2说param1是“a,b,c”,param2是“高,低”,预计返回一个数组[3,2],并将结果显示在3行2列中

我也试过Excel的ExcelDNA C#/尝试复制彭博BDH()的行为(写入数组后,Web请求) ,它工作正常。 但是我的要求是后台工程师会调用RTD函数,RTD函数是一个多步骤的过程,首先它会login(asynchronous,然后订阅(asynchronous),当我从后台工作者调用xlcall.RTD时,会给出访问违例

Excel UDF和RTD是被动的东西。 当用户input公式时,Excel调用UDF(RTD函数)计算公式并将结果返回给调用单元。 与RTD不同的是,UDF可以找出它从哪里被调用,但是它们都不能“扩展”调用范围。 扩展范围也会修改其他单元格中的公式/值 – 这不是UDF所允许的。 RTD服务器完全无法访问Excel对象模型。

考虑在同一个程序集中组合一个COM加载项和RTD服务器。 COM加载项可以处理SheetChange事件,以确定用户是否input引用您的RTD的公式。 发生这种情况时,COM加载项可以使用公式或数据填充任何所需的单元格区域,还可以设置RTD可访问的某些标志或存储数据。 此外,RTD可以调用加载项中定义的公共方法,并且可以用这种方式填充任何单元格。 如果你select这个选项,你无疑会在RefreshData事件中调用这样一个方法。 但请注意,此时Excel可能不会准备COM修改单元格的调用。 为避免潜在的问题,我build议在延迟之后修改单元格,请参阅ADXAddinModule.SendMessage()方法和ADXAddinModule.OnSendMessage事件。 重点在于OnSendMessage事件只有在Excel完成其任务并准备好请求时才会发生。

你怎么看?

白俄罗斯(GMT + 3),

Andrei Smolinjoin快速组长