C# 如何使用Excel DNA在Excel中的一系列单元格中循环构建UDF?
我正在用C#和Excel DNA构建一个UDF。然而,当我尝试循环遍历作为UDF参数之一的单元格范围时,遇到了一个难题。我的第一次尝试是用C#将这一范围的细胞转换成一个数组,但我不知道如何使用Excel DNA。我正在使用下面的VBA代码来构建我的C#代码 在C#中,我试图用这样的方式:C# 如何使用Excel DNA在Excel中的一系列单元格中循环构建UDF?,c#,excel,vsto,excel-dna,vba,C#,Excel,Vsto,Excel Dna,Vba,我正在用C#和Excel DNA构建一个UDF。然而,当我尝试循环遍历作为UDF参数之一的单元格范围时,遇到了一个难题。我的第一次尝试是用C#将这一范围的细胞转换成一个数组,但我不知道如何使用Excel DNA。我正在使用下面的VBA代码来构建我的C#代码 在C#中,我试图用这样的方式: using ExcelDna.Integration; namespace my_project { public class my_UDF_class { [ExcelFu
using ExcelDna.Integration;
namespace my_project
{
public class my_UDF_class
{
[ExcelFunction(Name = "my_UDF_function")]
public static double my_UDF_function(double stk, double f)
{
// transform range of cells into array?
int i = 1;
double c = 0;
double sum_f = 0;
double count_f = 0;
while (i > 30)
{
if (stk >= f(i))
{
stk = stk - f(i);
if (f(i) > 0)
{
c = c + 1;
sum_f = sum_f + f(i);
count_f = count_f + 1;
}
}
else
{
c = c + (stk / f(i));
stk = 0;
}
i++;
}
if (stk > 0)
{
c = c + (stk / (sum_f / count_f));
}
return c;
}
}
}
double total = 0;
for (int i = 0; i < f.Length; i++)
{
total = total + f[i];
}
Perharps,如果有一种直接循环单元格的方法,我甚至不需要数组。要在您的UDF中获得一个值数组,您可以将匹配参数的类型设置为
double[]
,对于一个简单的列表,double[,]
对于二维范围,或者如果您期望的不止是数字,则可以设置为object[,]
因此,您的函数签名可能是:
public static double my_UDF_function(double stk, double[] f)
您可以将项目与以下代码一起使用:
using ExcelDna.Integration;
namespace my_project
{
public class my_UDF_class
{
[ExcelFunction(Name = "my_UDF_function")]
public static double my_UDF_function(double stk, double f)
{
// transform range of cells into array?
int i = 1;
double c = 0;
double sum_f = 0;
double count_f = 0;
while (i > 30)
{
if (stk >= f(i))
{
stk = stk - f(i);
if (f(i) > 0)
{
c = c + 1;
sum_f = sum_f + f(i);
count_f = count_f + 1;
}
}
else
{
c = c + (stk / f(i));
stk = 0;
}
i++;
}
if (stk > 0)
{
c = c + (stk / (sum_f / count_f));
}
return c;
}
}
}
double total = 0;
for (int i = 0; i < f.Length; i++)
{
total = total + f[i];
}
双倍合计=0;
对于(int i=0;i
- 请注意,C#中的数组是基于0的
- 您可以使用
获取数组中的项数f.Length
- 对于二维数组,您可以通过
和f.GetLength(0)
获得二维中的项数g.GetLength(1)
- 您也可以使用VB.NET而不是C#来完成所有这些