并将结果绘制在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# / Try to copy Bloomberg BDH() behavior (writing Array after a web request),它工作正常。
但是我的要求是backgroundworker将调用RTD函数,RTD函数是一个多步骤过程,首先它将登录(异步,然后订阅(异步)),当我从backgroundworker调用xlcall.RTD时,它会给出accessinviolation异常

最佳答案

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)

安德烈·斯莫林(Andrei Smolin)
附加快递团队负责人

关于c# - 如何创建返回二维数组的UDF,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/12290176/

10-09 18:40