如何创建返回二维数组的UDF

时间:2012-09-05 21:38:38

标签: c# excel add-in user-defined-functions

并在Excel中的二维单元格中绘制结果? 我正在使用C#,. NET,Excel-DNA,外接程序Express RTD,

谢谢

编辑 我试过http://excel-dna.net/2011/01/30/resizing-excel-udf-result-arrays/,对我不起作用。 我想要这样的 MyUDF(param1,param2)根据param1,param2的长度返回一个像表一样的二维数组 说param1是“a,b,c”,param2是“高,低”,期望返回数组[3,2],并将结果显示为3行2列

我也试过Excel ExcelDNA C# / Try to copy Bloomberg BDH() behavior (writing Array after a web request),它运行正常。 但我的要求是后台工作人员会调用RTD功能,RTD功能是一个多步骤的过程,首先它会登录(不同步,然后订阅(非同步),当我从后台工作者调用xlcall.RTD时,它会给出访问异常

1 个答案:

答案 0 :(得分: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事件。关键是OnSendMessage事件仅在Excel完成其任务以及为请求做好准备时才会发生。

您怎么看?

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

安德烈斯莫林 加载项快速团队负责人