1 function index2ColName($columnNumber) 2 { 3 $dividend = $columnNumber; 4 $columnName = ''; 6 7 while ($dividend > 0) 8 { 9 $modulo = ($dividend - 1) % 26; 10 $columnName = chr(65 + $modulo) . $columnName; 11 $dividend = intval(($dividend - $modulo) / 26); 12 } 13 14 return $columnName; 15 }
百度来的算法全都不对,跟我一开始想的一样——把这个问题考虑成了10到26进制的转换,但事实并非如此。
想想以下情况,26进制用A代表数0,B代表数1……Z代表25。
那么表示26则需要进一位,即BA, 而excel里面Z列的下一列是AA。
我们的二十六进制体系里, AA = 00 = 0 = A。 So, 这个想法是错误的。
最后还是谷歌大法好,5分钟解决问题。
参考链接:
https://stackoverflow.com/questions/181596/how-to-convert-a-column-number-eg-127-into-an-excel-column-eg-aa