我需要一个算法将Excel列字母转换为正确的数字.
这将编写的语言是C#,但任何会做甚至伪代码.
请注意我将把它放在C#中,我不想使用office dll.
对于'A',预期结果将为1
因为'AH'= 34
对于'XFD'= 16384
Ian*_*son 108
public static int ExcelColumnNameToNumber(string columnName)
{
if (string.IsNullOrEmpty(columnName)) throw new ArgumentNullException("columnName");
columnName = columnName.ToUpperInvariant();
int sum = 0;
for (int i = 0; i < columnName.Length; i++)
{
sum *= 26;
sum += (columnName[i] - 'A' + 1);
}
return sum;
}
Run Code Online (Sandbox Code Playgroud)
mqp*_*mqp 16
int result = colName.Select((c, i) =>
((c - 'A' + 1) * ((int)Math.Pow(26, colName.Length - i - 1)))).Sum();
Run Code Online (Sandbox Code Playgroud)
int col = colName.ToCharArray().Select(c => c - 'A' + 1).
Reverse().Select((v, i) => v * (int)Math.Pow(26, i)).Sum();
Run Code Online (Sandbox Code Playgroud)
从最后到第一个循环浏览字符。将每个字母(A = 1,Z = 26)的值乘以26 ** N,将其相加。我不具备C#的字符串操作技能,因此这里有一些非常混杂的伪代码:
sum=0;
len=length(letters);
for(i=0;i<len;i++)
sum += ((letters[len-i-1])-'A'+1) * pow(26,i);
Run Code Online (Sandbox Code Playgroud)
小智 5
如果有人感兴趣,这是我用 JavaScript 编写的解决方案。
var letters = "abc".toUpperCase();
var sum = 0;
for(var i = 0; i < letters.length;i++)
{
sum *= 26;
sum += (letters.charCodeAt(i) - ("A".charCodeAt(0)-1));
}
alert(sum);
Run Code Online (Sandbox Code Playgroud)