gpt4 book ai didi

c# - 将长嵌套的 Excel 公式转换为 C#

转载 作者:太空宇宙 更新时间:2023-11-03 12:33:19 25 4
gpt4 key购买 nike

我的任务是将 Excel VBA 转换为基于网络的应用程序。我正在使用 Web Forms。我受困于一个长 Excel 公式,但我已将一半长公式转换为 C#

这是Excel公式:

IF(AND(D7="u", H7/F7>1), 0, INDEX(Scoring!$O$8:$O$10, SUMPRODUCT(--(E28 <= Scoring!$N8:$N10),--(E28 >= Scoring!$N8:$N10), ROW(INDIRECT("'Scoring'!$M1:$M3"))))

虽然这是我在 C# 方法 上的进展。我在 ELSE 部分需要帮助:

IF (variable = "u" && ((CurrentValue / AcceptedValue) > 1)){
return 0;
ELSE {
// the INDEX clause on the Excel Formula
}

O8 - O10 值为 {2, 1, 0}

N8 - N10 值为 {1, 1.5, 9999999999}

E280

我也逐个得到了公式剩余部分的结果。我只需要有关如何将其放入 C# 的指导

=INDEX(Scoring!$O$8:$O$10, SUMPRODUCT({1,1,1}, {0,0,0}, 1))

double minus(--) 使它返回 0/1 而不是 true/false。 ROW(INDIRECT( $M1-$M3)) 等同于 1

我需要一些帮助才能将 Excel 公式转换为 C# 代码。

最佳答案

这里有一些 C# 代码来复制这部分公式:

INDEX(Scoring!$O$8:$O$10, SUMPRODUCT(--(E28 <= Scoring!$N8:$N10),--(E28 >= Scoring!$N8:$N10), ROW(INDIRECT("'Scoring'!$M1:$M3")))

在代码中我必须分配数组 {1, 1, 1}对于 ROW(INDIRECT("'Scoring'!$M1:$M3")) .关于 SUMPRODUCT 的操作,您的问题有些含糊不清。 .根据support.office.com

Multiplies corresponding components in the given arrays, and returns the sum of those products.

但是您在问题中的一些细节让我觉得您在考虑对每个数组求和,然后将这些结果相乘。无论如何,请查看下面代码中的注释以遵循逻辑:

// inputs
double[] o8o10 = new double[] { 2, 1, 0 }; // Scoring!$O$8:$O$10
double[] n8n10 = new double[] { 1, 1.5, 9999999999 }; // Scoring!$N8:$N10
double e28 = 0; // E28

// entries to SUMPRODUCT
List<int> test1 = new List<int>();
List<int> test2 = new List<int>();
Array.ForEach(n8n10, x => { test1.Add((e28 <= x) ? 0 : 1); });
Array.ForEach(n8n10, x => { test2.Add((e28 >= x) ? 0 : 1); });
// ROW(INDIRECT("'Scoring'!$M1:$M3")) should be an array !
List<int> test3 = new List<int> { 1, 1, 1 };

// evalue SUMPRODUCT
int sumProductResult = 0;
for (var i=0; i<test1.Count; i++)
{
sumProductResult += test1[i] * test2[i] * test3[i];
}

// evalute INDEX
double indexResult = 0;
indexResult = o8o10[sumProductResult];

// output
Console.WriteLine(indexResult);
Console.ReadKey();

我的输出是2因为那是 o8o10 的第 0 个元素大批。我们得到 0对于数组索引,因为

=SUMPRODUCT({1, 1, 1}, {0, 0, 0}, {1, 1, 1})

决议:

=SUM(1*0*1, 1*0*1, 1*0*1}

这给出了 0 .

HTH

关于c# - 将长嵌套的 Excel 公式转换为 C#,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41932941/

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