Convertir A en 1 B en 2… Z en 26, puis AA en 27 AB en 28 (index de colonne sur les références de colonne dans Excel)

Quelqu’un at-il un algorithme ou une logique pour convertir A en 1, B en 2, …, Z en 26 puis AA en 27, AB en 28 etc.

En d’autres termes, convertir un index de colonne en référence de colonne dans Excel.

Regardez ces

///  /// 1 -> A
/// 2 -> B
/// 3 -> C
/// ... ///
/// /// public static ssortingng ExcelColumnFromNumber(int column) { ssortingng columnSsortingng = ""; decimal columnNumber = column; while (columnNumber > 0) { decimal currentLetterNumber = (columnNumber - 1) % 26; char currentLetter = (char)(currentLetterNumber + 65); columnSsortingng = currentLetter + columnSsortingng; columnNumber = (columnNumber - (currentLetterNumber + 1)) / 26; } return columnSsortingng; } /// /// A -> 1
/// B -> 2
/// C -> 3
/// ... ///
/// /// public static int NumberFromExcelColumn(ssortingng column) { int retVal = 0; ssortingng 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; }

Voici une expression LINQ simple:

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

Ce test

 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()); 

produira cette sortie:

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

Mise à jour: Voici le même code mais en ciblant .NET 2.0:

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

Ceci est un code pour JavaScript si vous préférez que ce soit fait côté client

  

Même problème, langage différent: PHP.

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