Преобразуйте A в 1 B в 2 … Z до 26, а затем от AA до 27 AB до 28 (индексы столбцов к столбцам в Excel)

Есть ли у кого-нибудь алгоритм или логика для преобразования A в 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