【问题标题】:How to return an array from a Excel udf?如何从 Excel udf 返回数组?
【发布时间】:2013-02-15 15:53:01
【问题描述】:

我想从我的 Excel UDF 返回一个二维数组,但它似乎只返回第一个元素:

public object[,] Get2DArray()
{         
     object [,] a = new object[2, 2];
     a[0,0] = 0;
     a[0,1] = 1;
     a[1,0] = 2;
     a[1,1] = 3;
     return a;
}

调用的样子:

=Get2DArray()

我做错了什么?

编辑:数组的大小可能会不时改变,所以我不想指定结果将填充的范围的大小。

【问题讨论】:

  • 为什么不使用列表?还是 IEnumerable?
  • 只返回第一个元素是什么意思?在 Excel 端显示将数组内容分配给范围的代码。
  • Mortalus,我可以使用列表,但我似乎需要在输入公式之前指定数据应填充到的范围。我不想这样做,我宁愿将公式留在一个单元格中,然后当它有数据时,它应该填充公式所在的单元格下方的所有单元格。
  • shahkalpesh,见上图:=Get2DArray()
  • 有一个 Excel-DNA 示例说明如何制作自动调整大小的数组函数 - 请参阅 excel-dna.net/2011/01/30/resizing-excel-udf-result-arrays

标签: c# excel user-defined-functions


【解决方案1】:

因为它是一个二维数组,所以数组的内容不能分配给一个单个单元格。

在您的示例中,您将返回一个 2x2 数组 - 选择一个范围(大小准确)并将公式写入所选内容的第一个单元格中。
例如假设您选择A1到B2,按 F2 KBD>,在单元格A1中的公式中键入(在选择处于活动状态时),然后您也应该能够看到写入B1,A2,B2的值.

我了解返回值数组可以是动态的。我不知道如何处理。但是,您可以在 VBA 中完成此操作,而不是使用 UDF。

【讨论】:

  • 仍然只给出带有一维数组的第一个元素
  • 它显示为 0。我想我需要使用 Application.Caller 并从中派生地址。
  • 记得在输入数组公式时按 Ctrl+Shift+Enter(在选择 2x2 范围并输入公式之后。公式应显示为带有括号,如 {=Get2DArray()}(虽然不是那样输入的)。
猜你喜欢
  • 1970-01-01
  • 2020-02-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-08-30
  • 2014-11-19
  • 1970-01-01
相关资源
最近更新 更多