gpt4 book ai didi

c# - 如何将对象从 UDF 参数转换为 Excel-DNA 中的 Excel 范围?

转载 作者:行者123 更新时间:2023-12-05 06:31:35 24 4
gpt4 key购买 nike

我正在使用 Excel-DNA 开发一个简单的插件。我写了一个下面的函数,但我发现很难将它转换为 Range 对象。尝试谷歌搜索但无法弄清楚。有人可以帮帮我吗

[ExcelFunction(Description = "Excel Range")]
public static string Concat2([ExcelArgument(AllowReference = true)] object rng)
{
try
{
// Assuming i am calling this from Excel cell A5 as =Concat2(A1:A2)
var app = (Excel.Application)ExcelDnaUtil.Application;
var r = app.Range[rng, Type.Missing];

return r.Cells[1,1] + r.Cells[2,2]
}

catch (Exception e)
{
return "Error";
}
}

最佳答案

您应该直接从输入参数中获取值,而不是获取 Range COM 对象。这样做也更有效率。

您的简单函数可能如下所示:

    public static object Concat2(object[,] values)
{
string result = "";
int rows = values.GetLength(0);
int cols = values.GetLength(1);
for (int i = 0; i < rows; i++)
{
for (int j = 0; j < cols; j++)
{
object value = values[i, j];
result += value.ToString();
}
}
return result;
}

通常您会想要检查 value 对象的类型,并根据它做一些不同的事情。从 Excel-DNA 传递的 object[,] 数组可以包含以下类型的项目:

  • 字符串
  • bool
  • ExcelDna.Integration.ExcelError
  • ExcelDna.Integration.ExcelEmpty
  • ExcelDna.Integration.ExcelMissing(如果调用函数时不带参数,如 =Concat2())。

如果您将签名更改为具有 object 类型的单个参数(而不是 object[,]),如下所示:

    public static object Concat2(object value)

然后,根据调用函数的方式,您可能会得到上述类型之一作为 value,或者您可能会得到一个 object[,] 数组作为value,因此在执行迭代之前,您的类型检查看起来会有点不同。

关于c# - 如何将对象从 UDF 参数转换为 Excel-DNA 中的 Excel 范围?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51758843/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com