繁体   English   中英

如何从ExcelDna返回自定义对象或双重[,]到Excel中的单元格?

[英]How to return a custom object or double[,] to a cell in Excel from ExcelDna?

理想情况下,我的UDF将以double [,],double []或自定义对象的形式返回一些双重结果。 我希望它全部存储在Excel中的单个单元格中,然后使用另一个UDF来提取它们。 它类似于缓存计算结果,并在以后按需显示。

可能吗?

一种方法是在Excel-DNA插件中有一个内部“对象存储”,然后有一个函数可以返回Excel的某种“句柄”,以及带有“句柄”和访问对象的访问器函数按要求。 清理可以创建的对象是一个可能的问题,但可以使用某些RTD功能来处理。

关于Excel-DNA组的讨论有一个在F#中实现这个想法的例子 - https://groups.google.com/group/exceldna/browse_frm/thread/138bc83923701e6d

这当然是可能的,但是如果不知道如何使用ExcelDNA,很难给出详细的答案。 我所知道的是,您是在vba代码中包装C#方法,还是在C#中处理Excel应用程序并直接从那里写入工作簿。 在这两种情况下,你都可以做你想做的事,但是做到这一点的方式会略有不同。 包装器方法的灵活性稍差,因为你必须首先将值传递给vba UDF,然后从那里将它们写入单元格,这样你就可以限制你可以返回的数据类型(就我而言)无论如何都知道)。

执行此操作的方法是将结果写入特定单元格,可能是隐藏的工作表,因此不能被篡改,然后使用其他UDF检索它们。 您必须对单元格地址进行硬编码,或者解析工作表以查找所需的值。

如果方法返回double[,] ,您可能必须将值写入两个不同的单元格,或者在一个单元格中将文本作为带分隔符的文本,然后在检索单元格值时从文本转换为double,类似于Double.Parse(cell.value.ToString().Split(',')[0])获取第一个值(假设您将值存储为逗号分隔的字符串)或vba中的类似代码(如果您使用)一个纯vba UDF来获取值...

如果你想这样做,我认为你肯定应该使用一个具有明确定义结构的隐藏表来存储你的值。 如果您只需要存储会话持续时间的值,那么我认为您应该将它们存储在vba模块中的全局变量中。

UPDATE

由于您只是编写函数,我认为您无法传递自定义对象(除非您实现自己的转换器,将其转换为文本然后以这种方式读回)。

您将doubledouble[,]传递给UDF中的变量并将其从那里写入单元格。 然后使用任何其他UDF从该单元格再次读回。

其余的和我上面写的一样。 如果在同一单元格中存储两个值,则必须以文本形式存储,因此在将它们传递给C#方法之前,必须首先拆分和解析UDF中的值(或者可以在方法中进行解析) )。

在实践中,你应该做的事情应该没有任何问题。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM