将一些Excel公式转换为C#

我试图将一些Excel公式转换成C#代码,我有点失落…

我有以下几点:

SUMPRODUCT(1*(RIGHT(A1)={"a","e","i","n","y"})) 

这到底是什么意思呢?

这是我所知道的:

  • RIGHT(A1)返回RIGHT(A1)本的最后一个字符。
  • SUMPRODUCT({1,2,3}, {4,5,6})返回1*4 + 2*5 + 3*6 (类似于标量产品,对吧?)

但这里是我不明白的地方:

如果文本是Claude ,例如…

RIGHT(A1)={"e","a","b","c","d"}返回TRUE

RIGHT(A1)={"a","b","e","c","d"}返回FALSE

我只改变了e字符的索引位置。

那里发生了什么?
我不了解什么?

基本上,公式检查单元格A1的最后一个字符是否是以下任何一个字符:a,e,i,n或y。 SUMPRODUCT部分是重要的,因为它是一次检查整个arrays对最后一个字符的黑客攻击。 当你去掉那个部分,只使用RIGHT(A1)={"a","b","e","c","d"} ,Excel实际上只查看数组中的第一个条目,看看是否匹配,并立即返回。 所以当“e”处于第一位的时候,你会变成True。

SUMPRODUCT允许检查应用于整个arrays。 另一种方法来看到这将是像这样以网格方式手动input到单独的单元格中

  A | B | C | D 1 | Claude | =RIGHT(A1,1) | 'a' | =1*(B1=C1) 2 | | =RIGHT(A1,1) | 'e' | =1*(B2=C2) 3 | | =RIGHT(A1,1) | 'i' | =1*(B3=C3) 4 | | =RIGHT(A1,1) | 'n' | =1*(B4=C4) 5 | | =RIGHT(A1,1) | 'y' | =1*(B5=C5) 6 | | | | =SUM(D1:D5) 

如果任何字符a,e,i,n,y位于A1的值的末尾,则右下angular的单元格将包含1,如果不是,则为0。 我手动执行与SUMPRODUCT相同的逻辑以获得相同的结果。

那么,这将如何在C#.Net中完成:

 var checkValue = "Claude"; var letters = {"a", "e", "i", "n", "y"}; var found = 0; foreach (var theLetter in letters) if (checkValue.EndsWith(theLetter)) found = 1; return found; // returns same value as Excel function 

如果你想根据@ CoryLarson的build议,一行可用于任何字母集合:

 Func<string, string[], int> LetterCount = (x, y) => y.Contains(x.Substring(x.Length-1, 1)) ? 1 : 0;