J'ai découvert une erreur dans mon premier post, j'ai donc décidé de m'asseoir et de faire le calcul. Ce que j'ai trouvé, c'est que le système de numérotation utilisé pour identifier les colonnes Excel n'est pas un système de base 26, comme l'a signalé une autre personne. Considérez ce qui suit dans la base 10. Vous pouvez également le faire avec les lettres de l'alphabet.
Espace: ......................... S1, S2, S3: S1, S2, S3
............ ........................ 0, 00, 000: .. A, AA, AAA
............. ....................... 1, 01, 001: .. B, AB, AAB
.............. ......................…,…,…: ..…,…,…
............... ..................... 9, 99, 999: .. Z, ZZ, ZZZ
Nombre total d'états dans l'espace: 10, 100, 1000: 26, 676, 17576
Total des États: ............... 1110 ................ 18278
Colonnes de nombres Excel dans les espaces alphabétiques individuels en utilisant la base 26. Vous pouvez voir qu'en général, la progression de l'espace d'états est a, a ^ 2, a ^ 3,… pour une base a, et le nombre total d'états est a + a ^ 2 + a ^ 3 +….
Supposons que vous vouliez trouver le nombre total d'états A dans les N premiers espaces. La formule pour ce faire est A = (a) (a ^ N - 1) / (a-1). Ceci est important car nous devons trouver l'espace N qui correspond à notre indice K. Si je veux savoir où K se situe dans le système numérique, je dois remplacer A par K et résoudre pour N. La solution est N = log { base a} (A (a-1) / a +1). Si j'utilise l'exemple de a = 10 et K = 192, je sais que N = 2,23804…. Cela me dit que K se trouve au début du troisième espace car il est un peu plus grand que deux.
La prochaine étape consiste à trouver exactement dans quelle mesure nous nous trouvons dans l'espace actuel. Pour trouver cela, soustrayez de K le A généré en utilisant l'étage de N. Dans cet exemple, l'étage de N est deux. Ainsi, A = (10) (10 ^ 2 - 1) / (10-1) = 110, comme prévu lorsque vous combinez les états des deux premiers espaces. Cela doit être soustrait de K car ces 110 premiers états auraient déjà été pris en compte dans les deux premiers espaces. Cela nous laisse avec 82 états. Donc, dans ce système numérique, la représentation de 192 dans la base 10 est 082.
Le code C # utilisant un index de base de zéro est
private string ExcelColumnIndexToName(int Index)
{
string range = string.Empty;
if (Index < 0 ) return range;
int a = 26;
int x = (int)Math.Floor(Math.Log((Index) * (a - 1) / a + 1, a));
Index -= (int)(Math.Pow(a, x) - 1) * a / (a - 1);
for (int i = x+1; Index + i > 0; i--)
{
range = ((char)(65 + Index % a)).ToString() + range;
Index /= a;
}
return range;
}
// Old Post
Une solution à base zéro en C #.
private string ExcelColumnIndexToName(int Index)
{
string range = "";
if (Index < 0 ) return range;
for(int i=1;Index + i > 0;i=0)
{
range = ((char)(65 + Index % 26)).ToString() + range;
Index /= 26;
}
if (range.Length > 1) range = ((char)((int)range[0] - 1)).ToString() + range.Substring(1);
return range;
}