我怎样才能得到某些细胞的背景值?

我试图创build一个ExcelReference,然后调用GetValue(),但这会导致XlCallException(exception中没有提供的细节)。

var val = new ExcelReference(1, 1).GetValue(); 

我究竟做错了什么?

你可能是从UDF内部调用这个。 普通的UDF不能读取工作表的其他部分 – 想法是将所需的信息作为parameter passing给函数。

您可以将Excel-DNA函数标记为“macros表单function”,这可以使其工作。 (在ExcelFunction属性中设置IsMacroType = true。)但是这对计算顺序有其他副作用,例如,您可能正在从该单元格获取与计算开始之前相同的值。

所以最好坚持Excel的function风格,并将额外的依赖关系传递给你的UDF。


另一种可能是你从后台工作者线程调用它。 Excel C API(通过ExcelReferencetypes使用)只能从主Excel线程中调用(线程安全UDF有一些例外)。 所以你需要让你的后台代码在主线程上运行。

Excel基本上是单线程的,所以在使用COM对象模型时也是如此 – 在COM实际运行之前,所有调用都由COM编组到主Excel线程。

在Excel-DNA加载项中,可以使用ExcelAsyncUtil.QueueAsMacro(…)帮助程序将代码作为macros运行在主线程上。 您传递的代理将尽快运行,并且可以安全地进行所要求的C API调用。