转换A到1 B到2 … Z到26然后AA到27 AB到28(列索引到Excel中的列引用)

是否有人将算法或逻辑转换为1,B转换为2,…,Z转换为26,然后AA转换为27,AB转换为28等。

换句话说,将列索引转换为Excel中的列引用。

看看这些

///  /// 1 -> A
/// 2 -> B
/// 3 -> C
/// ... ///
/// /// public static string ExcelColumnFromNumber(int column) { string columnString = ""; decimal columnNumber = column; while (columnNumber > 0) { decimal currentLetterNumber = (columnNumber - 1) % 26; char currentLetter = (char)(currentLetterNumber + 65); columnString = currentLetter + columnString; columnNumber = (columnNumber - (currentLetterNumber + 1)) / 26; } return columnString; } /// /// A -> 1
/// B -> 2
/// C -> 3
/// ... ///
/// /// public static int NumberFromExcelColumn(string column) { int retVal = 0; string col = column.ToUpper(); for (int iChar = col.Length - 1; iChar >= 0; iChar--) { char colPiece = col[iChar]; int colNum = colPiece - 64; retVal = retVal + colNum * (int)Math.Pow(26, col.Length - (iChar + 1)); } return retVal; }

这是一个简单的LINQ表达式:

 static int TextToNumber(this string text) { return text .Select(c => c - 'A' + 1) .Aggregate((sum, next) => sum*26 + next); } 

这个测试

 Console.WriteLine(" A -> " + "A".TextToNumber()); Console.WriteLine(" B -> " + "B".TextToNumber()); Console.WriteLine(" Z -> " + "Z".TextToNumber()); Console.WriteLine("AA -> " + "AA".TextToNumber()); Console.WriteLine("AB -> " + "AB".TextToNumber()); 

将产生此输出:

  A -> 1 B -> 2 Z -> 26 AA -> 27 AB -> 28 

更新:这是相同的代码,但针对.NET 2.0:

 static int TextToNumber(string text) { int sum = 0; foreach (char c in text) { sum = sum*26 + c - 'A' + 1; } return sum; } 

如果您喜欢在客户端完成,这是JavaScript的代码

  

同样的问题,不同的语言:PHP。

 function charToInt($char) { $array = array_flip(range(a, z)); return $array[$char] + 1; } echo charToInt('c'); outputs: 3