J'ai découvert une erreur dans mon premier message, alors j'ai décidé de m'asseoir et de faire les calculs. J'ai découvert que le système numérique utilisé pour identifier les colonnes d'Excel n'est pas un système en base 26, comme l'a indiqué une autre personne. Considérez ce qui suit en 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
Total des états dans l'espace : 10, 100, 1000 : 26, 676, 17576
Total des États : ...............1110................18278
Excel numérote les colonnes dans les différents espaces alphabétiques en utilisant la base 26. Vous pouvez voir qu'en général, la progression de l'espace d'état est a, a^2, a^3, pour une certaine base a, et le nombre total d'états est a + a^2 + a^3 + .
Supposons que l'on veuille trouver le nombre total d'états A dans les N premiers espaces. La formule pour le faire est A = (a)(a^N - 1 )/(a-1). Cette formule est importante car nous devons trouver l'espace N qui correspond à notre indice K. Si je veux savoir où se situe K dans le système numérique, je dois remplacer A par K et résoudre N. La solution est N = log{base a} (A (a-1)/a +1). Si je prends l'exemple de a = 10 et K = 192, je sais que N = 2,23804 . Cela m'indique que K se trouve au début du troisième espace puisqu'il est un peu plus grand que deux.
L'étape suivante consiste à déterminer exactement à quelle distance dans l'espace actuel nous nous trouvons. Pour cela, il faut soustraire de K le A généré en utilisant le plancher de N. Dans cet exemple, le plancher de N est de deux. Donc, A = (10)(10^2 - 1)/(10-1) = 110, comme on peut s'y attendre lorsque l'on combine les états des deux premiers espaces. Cela doit être soustrait de K parce que ces 110 premiers états auraient déjà été pris en compte dans les deux premiers espaces. Il nous reste donc 82 états. Ainsi, dans ce système numérique, la représentation de 192 en base 10 est 082.
Le code C# utilisant un indice de base de zéro est le suivant
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 de 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;
}
2 votes
Sans oublier qu'il existe des limites dans le nombre de colonnes disponibles. Par exemple, * Excel 2003 (v11) va jusqu'à IV, 2^8 ou 256 colonnes). * Excel 2007 (v12) va jusqu'à XFD, 2^14 ou 16384 colonnes.
1 votes
Duplication possible de Comment trouver le nom de la colonne Excel qui correspond à un nombre entier donné ?
0 votes
Cette question est étiquetée C# et excel. Je signale cette question comme étant dépassée, parce que nous vivons en 2016 et qu'il y a EPPLUS . Une bibliothèque C# couramment utilisée pour créer des feuilles de calcul Excel avancées sur le serveur. Qui est mise à disposition sous : GNU Library General Public License (LGPL). En utilisant EPPlus, vous pouvez facilement obtenir la chaîne Column.
0 votes
Notez que les limites de lignes et de colonnes dépendent davantage du format de fichier que de la version d'Excel, et peuvent être différentes pour chaque classeur. Elles peuvent changer même pour le même classeur s'il est enregistré dans un format plus ou moins ancien.
0 votes
@Tony_KiloPapaMikeGolf Je ne pense pas que ce soit dépassé. En fait, EPPLUS a changé sa licence, qui peut ne pas convenir à tous pour diverses raisons. De plus, pourquoi faire appel à une bibliothèque si tout ce dont vous avez besoin est aussi simple ? J'exporte des données au format Excel en utilisant OpenXML et je n'ai eu besoin que de quelques algorithmes comme ceux qui sont demandés ici. Pourquoi ajouter une bibliothèque au mélange ? Les besoins varient. La question n'est pas dépassée et est pertinente pour des cas d'utilisation simples. Cela dit, EPPLUS est une bibliothèque plutôt sympa ;)
0 votes
Au cas où vous en auriez besoin pour les cellules Aspose, ils ont aides intégrées .