Tôi phát hiện ra một lỗi trong bài đăng đầu tiên của mình, vì vậy tôi quyết định ngồi xuống và làm toán. Những gì tôi tìm thấy là hệ thống số được sử dụng để xác định các cột Excel không phải là một hệ thống cơ sở 26, như một người khác đã đăng. Hãy xem xét những điều sau trong cơ sở 10. Bạn cũng có thể làm điều này với các chữ cái trong bảng chữ cái.
Không gian: ......................... S1, S2, S3: S1, S2, S3
............ ........................ 0, 00, 000: .. A, AA, AAA
............. ....................... 1, 01, 001: .. B, AB, AAB
.............. ...................... ..., ..., ...: .. ..., ..., ...
............... ..................... 9, 99, 999: .. Z, ZZ, ZZZ
Tổng số trạng thái trong không gian: 10, 100, 1000: 26, 676, 17576
Tổng số quốc gia: ............... 1110 ................ 18278
Các cột số Excel trong các không gian theo thứ tự chữ cái riêng lẻ sử dụng cơ sở 26. Bạn có thể thấy rằng nói chung, tiến trình không gian trạng thái là a, a ^ 2, a ^ 3, Khắc cho một số cơ sở a và tổng số trạng thái là a + a ^ 2 + a ^ 3 +.
Giả sử bạn muốn tìm tổng số trạng thái A trong N khoảng trắng đầu tiên. Công thức để làm như vậy là A = (a) (a ^ N - 1) / (a-1). Điều này rất quan trọng vì chúng ta cần tìm không gian N tương ứng với chỉ số của chúng ta K. Nếu tôi muốn tìm ra K nằm ở đâu trong hệ thống số tôi cần thay A bằng K và giải cho N. Giải pháp là N = log { cơ sở a} (A (a-1) / a +1). Nếu tôi sử dụng ví dụ về a = 10 và K = 192, tôi biết rằng N = 2.23804. Điều này cho tôi biết rằng K nằm ở đầu không gian thứ ba vì nó lớn hơn hai một chút.
Bước tiếp theo là tìm chính xác khoảng cách trong không gian hiện tại của chúng ta. Để tìm điều này, hãy trừ đi K the A được tạo bằng cách sử dụng sàn của N. Trong ví dụ này, sàn của N là hai. Vì vậy, A = (10) (10 ^ 2 - 1) / (10-1) = 110, như mong đợi khi bạn kết hợp các trạng thái của hai không gian đầu tiên. Điều này cần phải được trừ khỏi K vì 110 trạng thái đầu tiên này đã được tính trong hai khoảng trống đầu tiên. Điều này để lại cho chúng tôi với 82 tiểu bang. Vì vậy, trong hệ thống số này, đại diện của 192 trong cơ sở 10 là 082.
Mã C # sử dụng chỉ số cơ bản bằng 0 là
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;
}
// Bài cũ
Một giải pháp dựa trên zero trong 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;
}