Saya menemukan kesalahan dalam posting pertama saya, jadi saya memutuskan untuk duduk dan melakukan perhitungan. Apa yang saya temukan adalah bahwa sistem angka yang digunakan untuk mengidentifikasi kolom Excel bukanlah sistem basis 26, seperti yang diposkan orang lain. Pertimbangkan hal-hal berikut dalam basis 10. Anda juga dapat melakukan ini dengan huruf-huruf alfabet.
Spasi: ......................... 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 status dalam ruang: 10, 100, 1000: 26, 676, 17576
Total Negara: ............... 1110 ................ 18278
Kolom angka Excel dalam spasi alfabet individual menggunakan basis 26. Anda dapat melihat bahwa secara umum, perkembangan ruang keadaan adalah a, a ^ 2, a ^ 3, ... untuk beberapa basis a, dan jumlah total state adalah a + a ^ 2 + a ^ 3 +….
Misalkan Anda ingin menemukan jumlah total negara bagian A dalam ruang N pertama. Rumus untuk melakukannya adalah A = (a) (a ^ N - 1) / (a-1). Ini penting karena kita perlu menemukan ruang N yang sesuai dengan indeks kita K. Jika saya ingin mencari tahu di mana K terletak pada sistem angka saya perlu mengganti A dengan K dan menyelesaikannya untuk N. Solusinya adalah N = log { base a} (A (a-1) / a +1). Jika saya menggunakan contoh a = 10 dan K = 192, saya tahu bahwa N = 2.23804…. Ini memberitahu saya bahwa K terletak di awal ruang ketiga karena sedikit lebih besar dari dua.
Langkah selanjutnya adalah menemukan dengan tepat seberapa jauh jarak kita saat ini. Untuk menemukan ini, kurangi dari K a yang dihasilkan menggunakan lantai N. Dalam contoh ini, lantai N adalah dua. Jadi, A = (10) (10 ^ 2 - 1) / (10-1) = 110, seperti yang diharapkan ketika Anda menggabungkan keadaan dari dua spasi pertama. Ini perlu dikurangi dari K karena 110 negara bagian pertama ini sudah diperhitungkan dalam dua ruang pertama. Ini membuat kita memiliki 82 negara. Jadi, dalam sistem bilangan ini, representasi 192 dalam basis 10 adalah 082.
Kode C # menggunakan indeks dasar nol adalah
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
Solusi berbasis nol di 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;
}