Ich habe in meinem ersten Beitrag einen Fehler entdeckt und mich entschlossen, mich hinzusetzen und zu rechnen. Was ich gefunden habe, ist, dass das Zahlensystem, das zur Identifizierung von Excel-Spalten verwendet wird, kein Basissystem ist, wie eine andere Person geschrieben hat. Beachten Sie Folgendes in Basis 10. Sie können dies auch mit den Buchstaben des Alphabets tun.
Leerzeichen: ......................... S1, S2, S3: S1, S2, S3
............ ........................ 0, 00, 000: .. A, AA, AAA
............. ....................... 1, 01, 001: .. B, AB, AAB
.............. ......................…,…,…: ..…,…,…
............... ..................... 9, 99, 999: .. Z, ZZ, ZZZ
Gesamtzustände im Raum: 10, 100, 1000: 26, 676, 17576
Gesamtzustände: ............... 1110 ................ 18278
Excel-Zahlenspalten in den einzelnen alphabetischen Räumen unter Verwendung der Basis 26. Sie können sehen, dass der Fortschreiten des Zustandsraums im Allgemeinen a, a ^ 2, a ^ 3,… für einige Basis a ist und die Gesamtzahl der Zustände a + a ist ^ 2 + a ^ 3 +….
Angenommen, Sie möchten die Gesamtzahl der Zustände A in den ersten N Feldern ermitteln. Die Formel dafür lautet A = (a) (a ^ N - 1) / (a-1). Dies ist wichtig, weil wir den Raum N finden müssen, der unserem Index K entspricht. Wenn ich herausfinden will, wo K im Zahlensystem liegt, muss ich A durch K ersetzen und nach N lösen. Die Lösung ist N = log { Basis a} (A (a-1) / a +1). Wenn ich das Beispiel von a = 10 und K = 192 verwende, weiß ich, dass N = 2.23804…. Dies sagt mir, dass K am Anfang des dritten Feldes liegt, da es etwas größer als zwei ist.
Der nächste Schritt besteht darin, genau herauszufinden, wie weit wir uns im aktuellen Raum befinden. Um dies zu finden, subtrahieren Sie von K das A, das unter Verwendung des Bodens von N erzeugt wurde. In diesem Beispiel ist der Boden von N zwei. Also ist A = (10) (10 ^ 2 - 1) / (10-1) = 110, wie erwartet, wenn Sie die Zustände der ersten beiden Räume kombinieren. Dies muss von K subtrahiert werden, da diese ersten 110 Zustände bereits in den ersten beiden Räumen berücksichtigt worden wären. Dies lässt uns mit 82 Staaten. In diesem Zahlensystem ist die Darstellung von 192 in Basis 10 also 082.
Der C # -Code mit einem Basisindex von Null ist
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;
}
// Alter Beitrag
Eine auf Null basierende Lösung in 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;
}